如何修改Levenshtein算法,知道它是否插入,删除或替换了一个字符?

时间:2014-06-12 17:00:32

标签: python algorithm levenshtein-distance

所以我试图设计一个Levenshtein算法的旋转,在那里我跟踪我在字符串中做了什么转换(插入一个或替换为b)。

示例:

基本上,我说我正在计算“bbd”和“bcd”的编辑距离

编辑距离为1,转换为“c的替代b”

问题: 我如何解决这个问题,因为我看到的实现并不关心自己知道什么样的操作只是总成本?

1 个答案:

答案 0 :(得分:7)

你可以使用this模块 - 那里有一个editops函数,它返回一个列表,其中包含将一个字符串转换为另一个字符串所需的操作。

示例:

Levenshtein.editops("FBBDE", "BCDASD")
[('delete', 0, 0), ('replace', 2, 1), ('insert', 4, 3), ('insert', 4, 4), ('replace', 4, 5)]

来自文档:

  

查找将一个字符串转换为另一个字符串的编辑操作序列。

     

editops(source_string,destination_string)   editops(edit_operations,source_length,destination_length)

     

结果是三元组列表(操作,spos,dpos),其中   操作是equal',替换',insert', or删除'之一; SPOS   和dpos是第一个(源)和中的字符位置   第二(目标)字符串。这些是关于signle的操作   字符。实际上,返回的列表不包含equal', but all the related functions accept both lists with and without 等于。