水母与PyJaroWinkler的比较

15

我正在尝试使用Jaro-Winkler相似度距离来判断两个字符串是否相似。我尝试使用这些库来比较单词carolelephant。结果不相似:

import jellyfish

jellyfish.jaro_winkler('Carol','elephant') 

返回值为0.4416666,而

from pyjarowinkler import distance

distance.get_jaro_distance('Carol','elephant')

返回 0.0 对我来说更有意义。

这两个库之间有bug吗?


实现似乎不兼容。jellyfish.jaro_winkler('test', 'rest')distance.get_jaro_distance('test', 'rest')产生不同的输出。我会找一些第三方库来确定哪种实现是正确的。 - Blender
刚才在这里发布了一条评论,以免有人只看到上面的评论。请看下面的回答。Jellyfish是正确的。我链接了关于Jaro Winkler距离的原始论文。 - Bierbarbar
2个回答

7

Jellyfish实现是正确的。

Carol和elephant没有匹配的前缀。因此,在这种情况下,Jaro-Winkler距离等于Jaro距离。我手动计算了Jaro距离,并发现Jellyfish的实现是正确的。有一个在线计算器,但在线计算器也是错误的。我还发现了一些其他的实现,比如python-Levenstein包中的实现,它也实现了Jaro-Winkler距离,这证实了我的计算结果。在npm上也有一个实现。如果你想自己计算分数,可以在这里找到该论文here


2
或许值得注意的是,R语言中有两种不同的实现似乎与jellyfish版本相匹配。
library(stringdist)
> 1 - stringdist("Elephant", "Carol", method = 'jw')
[1] 0.4416667

library(RecordLinkage)
> jarowinkler('Carol','elephant')
[1] 0.4416667

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接