计算列表Python中的levenshtein距离

时间:2015-04-04 14:35:22

标签: python levenshtein-distance edit-distance

我有一个字符串列表,我想根据levenstein距离过滤掉太相似的字符串。所以如果lev(list[0], list[10]) < 50;然后del list[10]。有没有办法可以更有效地计算列表中每对字符串之间的距离?谢谢!

data2= []
for i in data:
    for index, j in enumerate(data):
        s = levenshtein(i, j)
        if s < 50:
            del data[index]
    data2.append(i)

上面相当愚蠢的代码计算时间太长......

1 个答案:

答案 0 :(得分:1)

如果我们只保留命中字符串的索引并稍后跳过它们怎么办?我忽略了enumerate() and del()的重量和命中百分比(即必须从数据集中删除多少个字符串)。

THRESHOLD = 50
data = ["hel", "how", "are", "you"] # replace with your dataset

tbr = {} # holds the index of the strings to be removed
idx = 0
for i in data:
    for j in xrange(len(data)):
        if j != idx and levenshtein(i, data[j]) < THRESHOLD:
            tbr[j] = True
    idx += 1

# print tbr
data2 = []
idx = -1
for d in data:
    idx += 1
    if idx in tbr:
        continue # skip this string
    data2.append(d)
# print data2