从 Damerau-Levenshtein 提取操作

Extracting operations from Damerau-Levenshtein

Damerau-Levenshtein 距离告诉您两个单词之间添加、删除、替换和换位的次数(后者是 DL 与 Levenshtein 距离的区别)。

算法 on wikipedia 并且相对简单。但是我想要的不仅仅是距离;我想要实际操作。

例如一个接受 AABBCC 的函数,将其与 ABZ 进行比较,然后 returns:

(暂时忽略指数如何受移除影响)

看来你可以用DL计算产生的矩阵做点什么。 This site 产生上面的输出。下面的文字说你应该从矩阵的右下角开始,跟随每个单元格中的每个最低成本操作(跟随粗体单元格):

如果出现平局,它似乎优先考虑相等或替代,所以在我提供的示例中,当右下角的单元格为 4 用于替代和删除时,它选择替代。

然而,一旦它到达左上角的单元格,平等是得分最低的操作,得分为 0。但它选择了删除,得分为 2。

这似乎是正确的答案,因为如果您严格选择最低分数,您最终会在字符串的开头得到太多的 A。

但如果不是最低分,选择操作的真正步骤是什么?有没有其他方法可以从 DL 矩阵中选择操作,如果有,您有参考吗?

我错过了模糊字符串对如何重构操作的解释的重要部分:

But when you want to see the simplest path, it is determined by working backwards from bottom-right to top-left, following the direction of the minimum Change in each cell. (If the top or left edge is reached before the top-left cell, then the type of Change in the remaining cells is overwritten, with Inserts or Deletes respectively.)

...这解释了为什么忽略单元格 [1,1] 中的相等操作并使用删除代替!