Thanks Burke. Actually, the phonetics encoders would be great candidates for scripting, because ultimately, they're just a set of regex-driven string substitutions...
d On Mon, Feb 27, 2012 at 6:35 PM, Burke Mamlin <[email protected]>wrote: > Dave, > > Our immediate goals at AMPATH are to handle multiple identifiers and > possibly do distance comparisons of GPS coordinates. Your's is another > good example of another handy matching algorithm. The goal of creating an > interface for the algorithm is to allow for developers to create any > algorithm that meets their needs. So, instead of trying to solve every > problem in the patient matching module, we'll make it easy for devs add > customizations. I've spoken with Shaun Grannis and he likes the idea. > > While we'll start by introducing a custom algorithms, I'd also like to do > the same on the front end – i.e., allow for a custom column (per Shaun, > this should be called a "custom trait"), so devs could easily throw classes > on the classpath to expand on the list of available traits (columns) as > well as the list of possible methods of matching data. This would open the > door for popular customizations to eventually be packaged with the module. > And, I'd love to see a set of customizations use the scripting interface > built into Java > (JSR-223<http://jcp.org/aboutJava/communityprocess/final/jsr223/index.html>) > to create custom traits & algorithms that could bind the patient and API to > a scripting context and execute user-written scripts for truly customizable > matching (of course it would need to be efficient, but javax.script defines > a > CompiledScript<http://docs.oracle.com/javase/6/docs/api/javax/script/CompiledScript.html>… > so maybe it's not just a dream). Imagine being able to write your > namephonetics algorithm in Groovy or JavaScript and use it within the > patient matching module. ;-) > > Small steps... > > -Burke > > > On Mon, Feb 27, 2012 at 5:16 PM, Dave Thomas <[email protected]> wrote: > >> 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 >>> >> >> ------------------------------ >> 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]

