6

I would like to know if it's possible to use/install this java library on Mathematica. This library, named SimMetrics, has a lot of string similarity functions that I would like to test.

Here is the list of functions:

Levenstein, NeedlemanWunch, SmithWaterman, SmithWatermanGotoh, SmithWatermanGotohWindowedAffine, Jaro, JaroWinkler, ChapmanLengthDeviation, ChapmanMeanLength, QGramsDistance, BlockDistance, CosineSimilarity, DiceSimilarity, EuclideanDistance, JaccardSimilarity, MatchingCoefficient, MongeElkan, OverlapCoefficient.

I have no knowledge on Java and use a MAC. A thought in Leonid Java Reloader, but it's a complete .jar file, not a small class.

Update

I download the simmetrics_jar_v1_6_2_d07_02_07.jar from the link above, saved it on notebook directory and tryed:

Needs["JLink`"]
ReinstallJava[ClassPath->"/System/Library/Java/JavaVirtualMachines/:"<>NotebookDirectory[]<>"simmetrics_jar_v1_6_2_d07_02_07.jar"]    

Now I have to use LoadJavaClass? How can a list the available classes?

If I unzip the .jar file, the classes are inside this folder: uk/ac/shef/wit/simmetrics/similaritymetrics/

for example: Levenshtein.class

Murta
  • 26,275
  • 6
  • 76
  • 166
  • 1
    Many of these distance functions are built in to Mathematica as well, mostly with the same names. – bill s Aug 12 '13 at 02:25
  • 1
    Given that you could do it with .NET dlls, I'd say its also possible with Java libraries. Have you tried following this? http://reference.wolfram.com/mathematica/JLink/tutorial/CallingJavaFromMathematica.html – Jonie Aug 12 '13 at 03:26
  • tks @Jonie, it was a begin. – Murta Aug 12 '13 at 10:42

1 Answers1

4

Looking at this it is easy to figure out what to do:

c = LoadJavaClass[ "uk.ac.shef.wit.simmetrics.similaritymetrics.Levenshtein"]

Then

Constructors@c

and

Methods@c

will get you going. I tried things on Windows, but it should work on Mac alike:

Mathematica graphics

Rolf Mertig
  • 17,172
  • 1
  • 45
  • 76
  • 4
    I just want to add a couple remarks to Rolf's excellent answer. I want to discourage the use of an idiom like ReinstallJava[ClassPath->NotebookDirectory[]] for modifying the Java classpath. ReinstallJava is a destructive operation that might impact other J/Link-using packages currently in use on your system. Instead, use AddToClassPath["some dir containing jar files"]. The Simmetrics library also has a full set of JavaDocs that you can download separately from the site. That type of documentation is indispensable when tinkering with a library via J/Link. – Todd Gayley Aug 13 '13 at 15:28