接受真正稍微不同的值

时间:2013-11-07 14:32:54

标签: python algorithm levenshtein-distance

假设我们有两个例子:

之一:

a = "Six d.o.g.s."
b = "six d.o.g.s"

2:

c = "Death Disco"
d = "deathdisco"
e = "deathdisco666"

两者略有不同。第一个有一个点,第二个没有空格。有些是小写的。


目的:

  • 对于给定的ab,我们希望a.lower()==b.lower()提供true 如果他们有两个字母“错误”。

  • 要使cd成立,因为“错误”只有一个空格。

  • 但对于ce,虽然e还有两个字母 长度(与c相比)我们有三个不同的字母。

我怎么能用python做到这一点?通过正则表达式或是否有类似目的的图书馆?

1 个答案:

答案 0 :(得分:0)

所以考虑到minitech的评论,我写了我发现的代码:

def levenshtein(seq1, seq2):
    oneago = None
    thisrow = range(1, len(seq2) + 1) + [0]
    for x in xrange(len(seq1)):
        twoago, oneago, thisrow = oneago, thisrow, [0] * len(seq2) + [x + 1]
        for y in xrange(len(seq2)):
            delcost = oneago[y] + 1
            addcost = thisrow[y - 1] + 1
            subcost = oneago[y - 1] + (seq1[x] != seq2[y])
            thisrow[y] = min(delcost, addcost, subcost)
    return thisrow[len(seq2) - 1]


print levenshtein(a,b) < 2