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

标签 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 获得的另一个列表中的电影进行匹配,我打算比较两组中的标题并获取两个分数的平均值,并对两套电影的 Actor 阵容。谢谢

最佳答案

您正在正确使用该库。然而,您可能希望自定义您正在使用的指标。听起来像是过滤简短的常见单词,如“the”、“a”、“and”等,并且使用 q-gram 分词器可能比使用 StringMetrics 中的默认指标更有效,其中大多数对空格进行分词,并且没有应用过滤器或简化器。

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

<小时/>

当我使用您提供的网站计算快速棕色狐狸慢速棕色毛皮的余弦相似度和重叠系数时,我得到:

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 编写,毫无疑问。

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

关于java - 如何使用 Simmetrics java 计算重叠系数和 Jaro Winkler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34847982/

相关文章:

java - GUI 更新计时器非静态变量无法从静态上下文访问

r - 给定日期范围和相应的 ID,找到具有重叠日期的 ID 组

java - 利用 Spring Restdocs DSL 进行验证

html - Bootstrap 网格列重叠

html - Div 容器显示错误的宽度并与第二个容器重叠

elasticsearch - 文本字段上的ElasticSearch Analyzer

image - 关于如何实现从分形图像中提取时间序列数据的算法的三个想法

mysql - MySQL 中的全文搜索

java - 无签名 token Java CXF 客户端

java - 具有 ElasticSearch Reactive Streams 的 Spring Boot 应用程序的架构