用Levenshtein在Python中对字符串列表进行分组

时间:2014-05-21 15:12:40

标签: python grouping levenshtein-distance

我创建了一个脚本来计算两个弦的Levenshtein距离。现在我想根据Levenshtein距离对字符串列表进行分组。 (如果字符串的距离低于阈值,则它们将在同一组中):

目前,我已经做了一些事情,但似乎没有奏效。这是一个伪代码:

for every string in list:
    create a new cluster with this string
    remove the string from the list
    for every string in the remaining list:
        if distance(string1,string2) < threshold:
             add string2 to the cluster
             remove string2 from the list

这是真正的代码,因为一些用户提出了这个问题:

cid = 0
clusters = {}

numb = range(len(mylist))
for i in numb:
        cls = [mylist[i]]
        numb.remove(i)
        for j in numb:
            if distance(mylist[i],mylist[j]) <= threshold:
                cls.append(mylist[j])
                numb.remove(j)

        clusters[cid] = cls      
        cid+=1
        cls = []

2 个答案:

答案 0 :(得分:0)

您正在从正在迭代的列表中删除项目。这将改变索引并导致意外行为,您应该将所需的值复制到新列表,而不是修改您正在迭代的列表。

答案 1 :(得分:0)

以下是一些清理过的代码:

clusters = defaultdict(list)

numb = range(len(mylist))
for i in numb:
        for j in range(i+1, len(numb)):
            if distance(mylist[i],mylist[j]) <= threshold:
                clusters[i].append(mylist[j])
                clusters[j].append(mylist[i])