从 Damerau-Levenshtein 提取操作
Extracting operations from Damerau-Levenshtein
Damerau-Levenshtein 距离告诉您两个单词之间添加、删除、替换和换位的次数(后者是 DL 与 Levenshtein 距离的区别)。
算法 on wikipedia 并且相对简单。但是我想要的不仅仅是距离;我想要实际操作。
例如一个接受 AABBCC
的函数,将其与 ABZ
进行比较,然后 returns:
- 删除索引 0 处的 A ->
ABBCC
- 删除索引 2 处的 B ->
ABCC
- 删除索引 4 处的 C ->
ABC
- 用索引 5 处的 C 替换 Z ->
ABZ
(暂时忽略指数如何受移除影响)
看来你可以用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] 中的相等操作并使用删除代替!
Damerau-Levenshtein 距离告诉您两个单词之间添加、删除、替换和换位的次数(后者是 DL 与 Levenshtein 距离的区别)。
算法 on wikipedia 并且相对简单。但是我想要的不仅仅是距离;我想要实际操作。
例如一个接受 AABBCC
的函数,将其与 ABZ
进行比较,然后 returns:
- 删除索引 0 处的 A ->
ABBCC
- 删除索引 2 处的 B ->
ABCC
- 删除索引 4 处的 C ->
ABC
- 用索引 5 处的 C 替换 Z ->
ABZ
(暂时忽略指数如何受移除影响)
看来你可以用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] 中的相等操作并使用删除代替!