我正在尝试使用 Jellyfish 来处理模糊字符串。我注意到 jaro_distance 算法的一些奇怪行为。
我之前在使用 damerau_levenshtein_distance 算法时遇到了一些问题,这似乎是代码中的一个错误,然后堆栈用户在 github 上将其作为问题提出。
我不确定我是否在考虑测量错误,或者它是否是一个真正的错误。我查看了源代码(http://goo.gl/YVMl8k),但我不熟悉 C,所以我很难知道这是一个实现问题,还是我错了。
请注意以下事项:
In [1]: S1 = Poverty
In [2]: S2 = Poervty
In [3]: jf.jaro_distance(S3, S4)
Out[3]: 0.95238095
现在,如果我对 jarrow 距离测量的理解是正确的,我相信结果应该是0.9285714285
我已经确定了计算出错的原因。要计算度量,我认为以下是正确的:
(7.0/7.0 + 7.0/7.0 + ((7.0 - (3.0/2.0))/7.0) * (1.0/3.0) = 0.9285714285
该表达式中的关键数字是 3.0。这个数字必须代表“匹配的数量(但顺序不同)”(维基百科)。在我看来,在 S1 和 S2 中,匹配但序列顺序不同的字符是“e”、“r”、“v”。
然而,JellyFish 在计算时似乎只识别出两个转置:
(7.0/7.0 + 7.0/7.0 + ((7.0 - (2.0/2.0))/7.0) * (1.0/3.0) = 0.95238095
我错了,还是功能有问题?