【问题标题】:Damerau-Levenshtein distance code throwing errors?Damerau-Levenshtein 距离代码抛出错误?
【发布时间】:2024-01-04 16:46:01
【问题描述】:

由于某种原因,当我尝试实现以下代码(我使用的是 Sublime Text 2)时,它在第 18 行给出了错误“Invalid Syntax”。我不确定这是为什么,我找到了代码here 它显然应该工作,所以我不知道为什么它不工作。有小费吗? 代码如下:

def damerau_levenshtein_distance(word1, word2):
    distances = {}
    len_word1 = len(word1)
    len_word2 = len(word2)
    for i in xrange(-1, (len_word1 + 1)):
        distances[(i,-1)] = i + 1
    for j in xrange(-1, (len_word2 + 1)):
        distances[(-1,j)] = j + 1

    for i in xrange(len_word1):
        if word1[i] == word2[j]:
            distance_total = 0
        else:
            distance_total = 1
        distances[(i, j)] = min(
            distances[(i-1,j)] + 1, # deletion
            distances[(i,j-1)] + 1 # insertion
            distances[(i-1,j-1)] + distance_total #substitution
            )
        if i and j and word1[i] == word2[j-1] and word1[i-1] == word2[j]:
            distances[(i,j)] = min(distances[(i,j)], distances[i-2,j-2] + distance_total) # transposition

    return distances[len_word1-1,len_word2-1]    

【问题讨论】:

    标签: python distance levenshtein-distance


    【解决方案1】:

    有错误应该是:

    ,#insertion
    

    【讨论】:

    • 我纠正了这个错误,现在大部分情况下它都可以工作,但是每当我运行代码并调用函数时(例如,我使用了“damerau_levenshtein_distance('hellp', 'hello' )" 它在第 11 行 "if word1[i] == word2[j]:" 上抛出错误 "IndexError: string index out of range"
    • 可能缺少:for j in xrange(len_word2):
    • @missmayhem13:您没有正确复制博文中的代码;缺少一个循环for j in xrange(len_word2):
    【解决方案2】:

    看起来你已经解决了这个问题,但如果你不想自己实现所有这些,你可以使用 pypi 中的 jellyfish 包:https://pypi.python.org/pypi/jellyfish。过去我用它取得了巨大的成功。

    它包含几个距离函数,包括 Damerau-Levenshtein 距离。

    【讨论】: