如何使用 Simmetrics 计算重叠系数和 Jaro Winkler java

How to compute Overlap Coeffecient and Jaro Winkler using Simmetrics java

我一直在尝试使用来自的 Sim-metrics 库:

    <dependency>
        <groupId>com.github.mpkorstanje</groupId>
        <artifactId>simmetrics-core</artifactId>
        <version>4.1.0</version>
    </dependency>

到目前为止,我正在使用以下方法计算 Jaro Winkler:

StringMetric sm = StringMetrics.jaroWinkler();
res = sm.compare("Harry Potter", "Potter Harry");
System.out.println(res);

0.43055558

和余弦相似度:

sm  = StringMetrics.overlapCoefficient();
res = sm.compare("The quick brown fox", "The slow brawn fur");
System.out.println(res); 

0.25

但根据 https://asecuritysite.com/forensics/simstring

为此,jaro-winkler 应为 0,重叠系数应为 100。这是否是使用该库的正确方法?什么是正确的调用,比如说,如果我想 运行 这两个指标来匹配我从 IMDB 获得的一个列表和另一个列表的电影,我打算比较两组的标题并获得两个分数的平均值和对两组电影的演员做同样的事情。谢谢

您正在正确使用库。但是,您可能希望自定义您正在使用的指标。这听起来像过滤短的、常见的词,如 'the'、'a' 'and' 等,使用 q-gram 分词器可能比使用 StringMetrics 的默认指标更有效它在空格上进行标记并 none 应用过滤器或简化器。

除此之外,我真的无法告诉您哪些组合指标、分词器、过滤器和简化器可能适用于您的用例。最有效的是特定于领域的。您必须尝试几种组合,看看哪种组合效果最好。


当我使用您提供的网站计算 The quick brown foxThe slow brawn fur 的余弦相似度和重叠系数时,我得到:

String 1: The quick brown fox
String 2: The slow brawn fur

The results are then:
Cosine Similarity   25
Overlap Coefficient 25

当我使用 Simmetrics 时。

System.out.println(
  StringMetrics.overlapCoefficient().compare(
    "The quick brown fox", "The slow brawn fur")); // 0.25
System.out.println(
  StringMetrics.cosineSimilarity().compare(
     "The quick brown fox", "The slow brawn fur")); // 0.25

关于 Jaro Winkler,该网站看起来像是使用旧版本的 Simmetrics。度量和名称的具体组合,特别是 Chapman Length Deviation,最初是由 Simmetrics 的原作者 Sam Chapman 编写的,这一点毫无疑问。

旧版本有一些特殊之处,但如果不再次并排调试它们,我无法指出导致这种差异的具体版本。