如何使用Simmetrics java计算Overlap Coeffecient和Jaro Winkler

时间:2016-01-18 05:43:45

标签: java overlap similarity jaro-winkler

我一直在尝试使用以下的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获得的一个列表中的电影,我打算比较两个集合中的标题并获得两个分数的平均值并执行相同的操作来自两组电影的演员。感谢

1 个答案:

答案 0 :(得分:1)

您正在使用该库。但是,您可能希望自定义您使用的指标。这听起来像过滤短的,常见的单词,如'the','a''和'等,并且使用q-gram标记器可能比使用StringMetrics的默认度量更有效,其中大部分标记在空白上而没有应用过滤器或简化。

除此之外,我无法真正告诉您哪些组合指标,标记符,过滤器和简化器可能适用于您的用例。最有效的是相关领域。你必须尝试一些组合,看看什么效果最好。

当我使用您提供的网站计算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的网站。指标和名称的具体组合,特别是查普曼长度偏差,最初由Simmetrics Sam Chapman的原作者编写,对此毫无疑问。

旧版本有一些特点虽然我不能指出造成这种差异的特定版本,而不是再次并排调试它们。