Damerau-Levenshtein距离告诉你两个单词之间的加法,删除,替换和换位的数量(后者是区分DL与Levenshtein距离的区别)。
算法是on wikipedia并且相对简单。但是我想要的不仅仅是距离;我想要实际的操作。
例如,一个带AABBCC
的函数,将其与ABZ
进行比较,然后返回:
ABBCC
ABCC
ABC
ABZ
(忽略索引如何受到删除的影响)
看起来你可以对DL计算产生的矩阵做些什么。 This site生成上面的输出。下面的文字说你应该从矩阵的右下角走,按照每个单元格中的每个最低成本操作(遵循粗体单元格):
如果存在平局,似乎优先考虑平等或替代优先于其他任何东西,所以在我提供的示例中,当右下角的单元格为4替换和删除时,它选择替换。
然而,一旦它到达左上角的单元格,相等是得分最低的操作,为0.但它已经选择了删除,得分为2。
这似乎是正确的答案,因为如果你严格选择最低分,你最终会在字符串的开头有太多As。
但是,如果不是最低分,那么选择手术的真正步骤是什么?是否还有其他方法可以从DL矩阵中选择操作,如果有,您是否有参考?
答案 0 :(得分:1)
我错过了模糊字符串解释如何重构操作的重要部分:
但是当你想看到最简单的路径时,它是通过从每个单元格中最小变化的方向从右下到左上向后工作来确定的。 (如果在左上角单元格之前到达顶部或左边缘,则会覆盖剩余单元格中的更改类型,分别使用“插入”或“删除”。)
...这解释了为什么忽略单元格[1,1]中的相等操作而改为使用删除!