我一直在尝试使用 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);
block 引用> block 引用>0.43055558
和余弦相似度:
sm = StringMetrics.overlapCoefficient(); res = sm.compare("The quick brown fox", "The slow brawn fur"); System.out.println(res);
block 引用> block 引用>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/