【问题标题】:Is Jellyfish's Damerau–Levenshtein distance calculation buggy?Jellyfish 的 Damerau-Levenshtein 距离计算有问题吗?
【发布时间】:2013-11-28 06:02:39
【问题描述】:

我正在尝试使用Jellyfish 处理模糊字符串。我注意到Damerau–Levenshtein distance 算法的一些奇怪行为。例如:

import jellyfish as jf
In [0]: jf.damerau_levenshtein_distance('ZX', 'XYZ')
Out[0]: 3
In [1]: jf.damerau_levenshtein_distance('BADC', 'ABCD')
Out[1]: 3

在我看来,两者都应该得分 2。

在第一个例子中

  1. ZXXZ(转置相邻字符)
  2. XZXYZ(插入Y

在第二个例子中

  1. BACDABDC(转置相邻的BA字符)
  2. ABDCABCD(转置相邻的DC字符)

这是算法有问题,还是我误解了度量?任何指导将不胜感激。

编辑

为了让事情更奇怪,我还观察到以下几点:

In [3]: jf.damerau_levenshtein_distance('jellyifhs', 'jellyfish')
Out[3]: 2
In [4]: jf.damerau_levenshtein_distance('ifhs', 'fish')
Out[4]L 3

这特别奇怪,因为两个示例中的编辑数量不仅应该是两个,而且它们是完全相同的编辑:

在第三个例子中

  1. jellyifhsjellyfihs(转置相邻字符if
  2. jellyfihsjellyfish(转置相邻字符hs

在第四个例子中

  1. ifhsfihs(转置相邻字符if
  2. fihsfish(转置相邻字符hs

【问题讨论】:

  • 我认为转置算两个步骤。
  • @aIKid:两个相邻字符的换位是一个操作/步骤。
  • +1,看起来他们已经实施了 OSA 而不是 Damerau–Levenshtein 距离。
  • 这就是我的想法......实际上我也发现了 jaro_distance 的错误。我在 github 上但从不使用它,是直接给他们发电子邮件还是在 github 上做点什么更好?我想我会在这里更新我的问题以提出这个问题

标签: python string python-2.7 fuzzy-comparison


【解决方案1】:

来自wikipedia

在信息论和计算机科学中,Damerau-Levenshtein 距离(以 Frederick J. Damerau 和 Vladimir I. Levenshtein 命名)[需要引用] 是两个字符串之间的“距离”(字符串度量),即符号,通过计算将一个字符串转换为另一个字符串所需的最小操作数给出,其中操作定义为单个字符的插入、删除或替换,或两个相邻字符的转置。

但如果你进一步阅读,

以 CA 和 ABC 之间的编辑距离为例。 Damerau-Levenshtein 距离 LD(CA,ABC) = 2 因为 CA -> AC -> ABC,但最佳字符串对齐距离 OSA(CA,ABC) = 3 因为如果使用操作 CA -> AC,则不是可以使用 AC -> ABC,因为这将需要多次编辑子字符串,这在 OSA 中是不允许的,因此最短的操作序列是 CA -> A -> AB -> ABC。请注意,对于最佳字符串对齐距离,三角不等式不成立:OSA(CA,AC) + OSA(AC,ABC)

编辑:

查看source后,很明显该函数计算的是OSA而不是Damerau–Levenshtein distance

【讨论】:

  • 这似乎很清楚地表明“Damerau–Levenshtein 距离 LD(CA,ABC) = 2”,这就是为什么当在 jellyfish 中实现的相同问题返回 3 时我感到惊讶
  • 是的,我的错,看起来实现计算 OSA。提交了一个问题github.com/sunlightlabs/jellyfish/issues/13
  • 这就是我的想法......实际上我也发现了 jaro_distance 的错误。我在 github 但从不使用它,是直接给他们发电子邮件还是在 github 上做点什么更好?
  • 在 github 上提出问题总是更好,因为其他人(如其他用户)也会知道这个问题,他们中的一些人(可能不是存储库所有者)也可以提交修复到问题。
  • 酷,我想我会在这里提出另一个。问题是我不确定我是不是弄错了,或者代码是错误的。我不是这些措施的专家...