Hi. I haven't followed this discussion very closely but if you're creating interfaces in the patient matching module, i just wanted to register the use-case that it would be really cool if there were interfaces exposed in patient matching that would allow namephonetics to register a phonetics equivalence test as part of the matching criteria.
(meaning finding names that are phonetically the same, even if spelled differently, according to the phonetics structure of the local language) d On Mon, Feb 27, 2012 at 10:33 AM, Burke Mamlin <[email protected]>wrote: > All we need (at least to get started) is for the algorithm that is already > stored in the database to allow for custom values – e.g., > "ke.or.ampath.matching.FooBarMatchSimilarityAlgorithm". We will supply our > own algorithms on the classpath. As long as the patient matching module > calls algorithm.*getMatchSimilarity(v1,v2)* when comparing values, we're > good. > > Eventually, we'd like to something similar with column definitions, e.g. > something like: > > interface CustomColumn { > public String getName(); > public String getValue(Patient patient); > } > > But we can focus on the algorithm first, since it will solve our immediate > problems. As long as we can get agreement on a patch, then AMPATH can > apply the patch locally to move forward with custom algorithms while the > patient matching module is being updated. > > Cheers, > > -Burke > > > On Mon, Feb 27, 2012 at 1:03 PM, Suranga Kasthurirathne < > [email protected]> wrote: > >> >> Hi, >> >> This sounds quite practical to me. I understand what you're tying to do. >> (of course, i'm not THE top expert; we'll need to consult with Dr, Shaun >> too.) >> In regard to improving the MatchResult class, I think that we should >> follow the second plan that Dr. Burke suggested. >> However the question is, do we need database support for this >> functionality ? I don't think so. >> >> In response to Jeremy's questions, I feel that these changes can >> be fitted into the current design quite easily. >> And also ( Pending Dr. Shauns comments) I feel that these changes can go >> into the trunk itself. >> Looking at the possibility of custom columns; once again, this is >> possible, but not quite easy. It will need some re-factoring. And also, >> where are we going to store information on the custom columns? Be it either >> a flat file or a database, we're still going to need some major changes. >> And finally, will creating custom columns affect our calculations in any >> way ? there are a lot of calculations happening under the hood, so we'll >> need to check that out as well. >> >> I'd like to help you out with this in any way that I can. >> >> >> >> >> On Mon, Feb 27, 2012 at 9:11 PM, Suranga Kasthurirathne < >> [email protected]> wrote: >> >>> Hi, >>> >>> Im on a bus right now, so I could not go through the mails properly yet. >>> I will try to come up with some sensible comments as soon as possible :-) >>> On 27 Feb 2012 20:22, "Burke Mamlin" <[email protected]> wrote: >>> >>>> More specifically, we'd like to refactor >>>> MatchResult.*getSimilarityScore(String >>>> demographic)*<https://source.openmrs.org/browse/Modules/patientmatching/src/org/regenstrief/linkage/MatchResult.java?r=25928&r=22126#to164>so >>>> that it uses an interface instead of a switch statement to match values. >>>> >>>> For example: >>>> >>>> interface MatchSimilarityAlgorithm { >>>> public String getName(); >>>> public double getMatchSimilarity(String val1, String val2); >>>> } >>>> >>>> then creating classes like: >>>> >>>> class ExactMatchSimilarity implements MatchSimilarityAlgorithm { >>>> public String getName() { >>>> return "Exact Match"; >>>> } >>>> public double getMatchSimilarity(String val1, String val2) { >>>> return StringMatch.getExactMatchSimilarity(val1, val2); >>>> } >>>> } >>>> >>>> class LCSMatchSimiliarity implements MatchSimilarityAlgorithm { >>>> public String getName() { >>>> return "Longest Common Subsequence"; >>>> } >>>> public double getMatchSimilarity(String val1, String val2) { >>>> return StringMatch.getLCSMatchSimilarity(val1, val2); >>>> } >>>> } >>>> >>>> etc... >>>> >>>> This would make algorithm a MatchSiimilarityAlgorithm instead of a >>>> String. The switch statement in MatchResult.* >>>> getSimilarityScore(String)* can then be replaced with: >>>> >>>> return algorithm.getSimilarityScore(val1, val2); >>>> >>>> This would allow us to introduce new algorithms. Of course, the UI >>>> would need some minor refactoring to use the MatchSimilarityAlgorithm.* >>>> getName()* method to get names of algoirthms. >>>> >>>> If those changes seem to bold at first, then a quicker step in the >>>> direction would be to introduce the interface, allow algorithm to be a >>>> class name, and refactor the last (default) case in the switch statement to >>>> something like: >>>> >>>> default: >>>> try { >>>> Class clazz = Class.forName(algorithm); >>>> if (clazz instanceof MatchSimilarityAlgorithm) >>>> return ((MatchSimilarityAlgorithm)algorithm) >>>> .getSimilarityScore(val1, val2); >>>> } catch (ClassNotFoundException e) { >>>> return 0; >>>> >>>> This wouldn't fully customize algorithms, but would at least allow us >>>> to sneak in our own algorithms during matching. >>>> >>>> Cheers, >>>> >>>> -Burke >>>> >>>> On Mon, Feb 27, 2012 at 8:49 AM, Jeremy Keiper <[email protected]>wrote: >>>> >>>>> Suranga, James, Burke, Shaun, etc - >>>>> >>>>> AMPATH has a development-backed immediate interest in these custom >>>>> column definitions for acquiring and comparing attributes of patient data. >>>>> If there is any way that this can be fitted into the current design, >>>>> could >>>>> we get some direction on how it could work and whether the Patient >>>>> Matching >>>>> Module authors would like to incorporate it to trunk or allow us to branch >>>>> it for those purposes? >>>>> >>>>> Thanks! >>>>> >>>>> Jeremy Keiper >>>>> OpenMRS Core Developer >>>>> AMPATH / IU-Kenya Support >>>>> >>>>> >>>>> >>>>> On Tue, Feb 21, 2012 at 10:00 PM, Rajib Sengupta >>>>> <[email protected]>wrote: >>>>> >>>>>> Hello All, >>>>>> As new implementor of openMRS, I cannot resist, but to chime in this >>>>>> discussion. >>>>>> >>>>>> If the web UI of patient matching can be configurable, it will be >>>>>> indeed a great feature. Primarily this will help implementation team >>>>>> which >>>>>> is low with pure developer resources and for implementations in new >>>>>> geographic regions where the patient matching can be based on different >>>>>> patient attributes, that is not available in the current ui, out of the >>>>>> box. >>>>>> >>>>>> Again, this is just our opinion and want to share it with the >>>>>> development team so that development items can be prioritized from an >>>>>> user >>>>>> usability perspective. >>>>>> >>>>>> Thanks, >>>>>> Rajib >>>>>> >>>>>> *From:* Suranga Kasthurirathne <[email protected]> >>>>>> *To:* [email protected] >>>>>> *Sent:* Tuesday, February 21, 2012 12:21 PM >>>>>> *Subject:* Re: [OPENMRS-DEV] Latest improvements to the Patient >>>>>> Matching module >>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> I agree. Right now, the web based ui that you'll get by loading the >>>>>> module doesn't actually let you make use of the extensive (really really >>>>>> really extensive) functionality the patientmatching module can offer. If >>>>>> fact, sometimes I feel that the web ui is tying to hide its true >>>>>> awesomeness. >>>>>> If the web ui let you make use of all the >>>>>> extensive functionality that the module offers, it would be one of the >>>>>> top favorite of our modules. >>>>>> However that said, i'm not sure which of the two above >>>>>> mentioned efforts should get priority over the other. I'm OK with >>>>>> whatever >>>>>> the experts agree on :-) >>>>>> >>>>>> >>>>>> On Tue, Feb 21, 2012 at 11:24 AM, Darius Jazayeri < >>>>>> [email protected]> wrote: >>>>>> >>>>>> It certainly has potential as a GSoC project. >>>>>> >>>>>> That said, my main concern with the Patient Matching module has been >>>>>> that the UI is not easily approachable by anyone who hasn't built up some >>>>>> domain knowledge on patient matching. I believe this has been improved, >>>>>> though I'm not sure how much. Making it usable by an admin with only >>>>>> basic >>>>>> OpenMRS knowledge would be a higher priority for me. (Unless that's >>>>>> already >>>>>> been done!) >>>>>> >>>>>> -Darius >>>>>> >>>>>> >>>>>> On Mon, Feb 20, 2012 at 8:50 PM, Suranga Kasthurirathne < >>>>>> [email protected]> wrote: >>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> To the best of my knowledge, the patient Matching module provides >>>>>> multiple ways of reading in data (txt files, one or two databases) >>>>>> but doesn't really provide you with an interface for data columns. >>>>>> So right now, it seems to be that we really can't add derived columns >>>>>> like the ones you and Darius mentioned. >>>>>> >>>>>> However, it does provide an interface for Analyzers (which is >>>>>> comparable to algorithms), so users can write up their own analyzers if >>>>>> they wish to do so. >>>>>> I understand the functionality that you are talking about, and I >>>>>> realize that its an important and useful feature. >>>>>> Possibly, this will be easier to implement once the database changes >>>>>> are in. >>>>>> >>>>>> I will talk to James regarding this, and get his feedback on my >>>>>> comments.... >>>>>> >>>>>> @Dr. Burke, @Darius, mmm.... does this sound like a good GSOC idea to >>>>>> you ? maybe Dr. Grannis will also be interested :-) >>>>>> >>>>>> >>>>>> Thanks and best regards, >>>>>> Suranga >>>>>> >>>>>> >>>>>> >>>>>> On Tue, Feb 21, 2012 at 5:44 AM, Darius Jazayeri < >>>>>> [email protected]> wrote: >>>>>> >>>>>> What Burke describes, with the ability to write those as groovy and >>>>>> store them in the DB would be pretty neat. :-) >>>>>> >>>>>> -Darius >>>>>> >>>>>> >>>>>> On Mon, Feb 20, 2012 at 2:08 PM, Burke Mamlin < >>>>>> [email protected]> wrote: >>>>>> >>>>>> Suranga, >>>>>> >>>>>> Does the patient matching module provide interfaces for a data source >>>>>> columns and/or algorithms so implementations could define custom >>>>>> column(s) >>>>>> and/or custom comparison algorithm(s)? For example, I'm imagining >>>>>> something like: >>>>>> >>>>>> interface DataSourceColumn { >>>>>> public String name(); >>>>>> public String getValue(Patient patient); >>>>>> } >>>>>> >>>>>> interface Algorithm { >>>>>> public String getName(); >>>>>> public float match(String a, String b); >>>>>> } >>>>>> >>>>>> Assuming the out-of-the-box patient demographics implement the >>>>>> DataSourceColumn interface, it would be easy to add new derived columns >>>>>> (e.g., a region-specific soundex algorithm, a column that concatenates >>>>>> all >>>>>> patient identifiers, or a column that combines latitude & longitude from >>>>>> address). And assuming that "Exact Match" and other out-of-the-box >>>>>> comparison algorithms imlemented the Algorithm interface, then it would >>>>>> be >>>>>> easy to add new custom algorithms (e.g., matching GPS coordinates based >>>>>> on >>>>>> computed distance). >>>>>> >>>>>> Cheers, >>>>>> >>>>>> -Burke >>>>>> >>>>>> On Mon, Feb 20, 2012 at 3:15 AM, Suranga Kasthurirathne < >>>>>> [email protected]> wrote: >>>>>> >>>>>> >>>>>> Hi everyone, >>>>>> >>>>>> We have just committed some important changes to the patientMatching >>>>>> module<https://wiki.openmrs.org/display/docs/Patient+Matching+Module> >>>>>> . >>>>>> >>>>>> These changes are part of our efforts to move user generated patient >>>>>> matching report details from a flat file system to a database. We have >>>>>> not >>>>>> completed the entire effort, but have made a reasonable amount of >>>>>> progress. At this given moment, the enhancements we made will let you >>>>>> store >>>>>> user defined patient matching strategies in the database. Efforts to >>>>>> store >>>>>> the entire user generated report in the database are still underway. >>>>>> Please note that following these changes, user defined strategies are >>>>>> now stored in database tables, and not in the existing config.xml file. >>>>>> >>>>>> However, do note that this effort is still at an experimental level, >>>>>> so do be careful if you decide to use the latest build. >>>>>> >>>>>> -- >>>>>> On behalf of the PatientMatching team, >>>>>> Suranga >>>>>> >>>>>> Click here to >>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>>> OpenMRS Developers' mailing list >>>>>> >>>>>> >>>>>> Click here to >>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>>> OpenMRS Developers' mailing list >>>>>> >>>>>> >>>>>> Click here to >>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>>> OpenMRS Developers' mailing list >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Best Regards, >>>>>> >>>>>> Suranga >>>>>> >>>>>> Click here to >>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>>> OpenMRS Developers' mailing list >>>>>> >>>>>> >>>>>> Click here to >>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>>> OpenMRS Developers' mailing list >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Best Regards, >>>>>> >>>>>> Suranga >>>>>> >>>>>> Click here to >>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>>> OpenMRS Developers' mailing list >>>>>> >>>>>> >>>>>> ------------------------------ >>>>>> Click here to >>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>>> OpenMRS Developers' mailing list >>>>>> >>>>> >>>>> ------------------------------ >>>>> Click here to >>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>>> OpenMRS Developers' mailing list >>>>> >>>> >>>> ------------------------------ >>>> Click here to >>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >>>> OpenMRS Developers' mailing list >>> >>> >> >> >> -- >> Best Regards, >> >> Suranga >> >> ------------------------------ >> Click here to >> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from >> OpenMRS Developers' mailing list >> > > ------------------------------ > Click here to > unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from > OpenMRS Developers' mailing list > _________________________________________ To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to [email protected] with "SIGNOFF openmrs-devel-l" in the body (not the subject) of your e-mail. [mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l]

