python - 有界/极限的编辑距离

标签 python break levenshtein-distance

我发现了 Levenshtein distance 的一些 Python 实现.

我想知道如何有效地修改这些算法,以便它们在 Levenshtein 距离大于 n(例如 3)时中断,而不是运行到最后?

所以本质上,如果我只是想知道距离是否大于阈值,我不想让算法运行太长时间来计算最终距离。

我在这里找到了一些相关的帖子:

  1. Modifying Levenshtein Distance algorithm to not calculate all distances
  2. Levenstein distance limit
  3. Most efficient way to calculate Levenshtein distance
  4. Levenshtein Distance Algorithm better than O(n*m)?

但是,我仍然没有看到任何 Python 代码可以实现我上面描述的功能(这或多或少也是这些帖子所描述的)。

P.S.:下面@amirouche提供的解决方案基于我通过一些基准测试测试过的最快实现(从这里: https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Pythonhttps://stackoverflow.com/a/32558749/9024698 ),并且它的有界版本是我的同类中最快的一个测试(不排除可能有更快的测试)。

最佳答案

Levenstein distance limit 中所述,您可以在计算出提前返回的行上添加测试:

def levenshtein(s1, s2, maximum):
    if len(s1) > len(s2):
        s1, s2 = s2, s1

    distances = range(len(s1) + 1)
    for i2, c2 in enumerate(s2):
        distances_ = [i2+1]
        for i1, c1 in enumerate(s1):
            if c1 == c2:
                distances_.append(distances[i1])
            else:
                distances_.append(1 + min((distances[i1], distances[i1 + 1], distances_[-1])))
        if all((x >= maximum for x in distances_)):
            return False
        distances = distances_
    return distances[-1]

关于python - 有界/极限的编辑距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59686989/

相关文章:

android - 避免在 TextView 中的特定位置换行

select - break 语句是否从 switch/select 中断?

c# - 如何计算给定 2 个字符串的距离相似性度量?

python - Pandas 中 bool 索引导致内存爆炸

python - 使用命令行参数通过 Cython 运行 python 代码

c# - 在所需级别退出嵌套循环

compare - 计算相对 Levenshtein 距离 - 有意义吗?

python - 如何在 Python 中使用 pickle 在文件系统上加载 .dataframe 文件

python - 如何在cv2.warp方法中获取扭曲了 “from no where”的像素的蒙版?

java - 如何找到两个多行字符串之间的相似度百分比?