• 编辑距离 只有插入和替换没有删除


    动态规划求编辑距离思路:编辑距离 - 动态规划解法 Edit Distance - Dynamic Programming_哔哩哔哩_bilibili

    我的改动:忽略识别结果中多出来的字符

    思路:如果最小值来自同列的上面一行,则需要删除操作。此时不再加一,即为忽略删除操作。

    核心改动:d[i][j] = min(d[i - 1][j], d[i][j - 1], d[i - 1][j - 1]) + min(np.argmin([d[i - 1][j], d[i][j - 1], d[i - 1][j - 1]]), 1)

    1. def damerau_levenshtein_distance_no_del(string1,string2):
    2. m = len(string1)
    3. n = len(string2)
    4. # n+1行 m+1列 表示由 m 对应的字符串转到 n 对应的字符串
    5. d = [[0] * (n + 1) for _ in range(m + 1)]
    6. # 初始化第 1 行 一个空字符到其他字符的操作数
    7. for j in range(n + 1):
    8. d[0][j] = j
    9. # 初始化第 1 列 其他字符到空字符的操作数
    10. d[1][0] = 1
    11. for i in range(2,m + 1):
    12. d[i][0] = min(i, d[i-1][0])
    13. # 自底向上递推计算每个 d[i][j] 的值
    14. # 一行行填充值
    15. for i in range(1, m + 1):
    16. string11 = string1[0:i]
    17. for j in range(1, n + 1):
    18. string22 = string2[0:j]
    19. if string1[i - 1] == string2[j - 1]:
    20. d[i][j] = d[i - 1][j - 1]
    21. pass
    22. else:
    23. import numpy as np
    24. d[i][j] = min(d[i - 1][j], d[i][j - 1], d[i - 1][j - 1]) + min(np.argmin([d[i - 1][j], d[i][j - 1], d[i - 1][j - 1]]), 1)
    25. pass
    26. # if i > 1 and j > 1 and string1[i - 1] == string2[j - 2] and string1[i - 2] == string2[j - 1]:
    27. # d[i][j] = min(d[i][j], d[i - 2][j - 2] + 1)
    28. return d[m][n]

    下面是普通的编辑距离

    1. def damerau_levenshtein_distance(string1, string2):
    2. m = len(string1)
    3. n = len(string2)
    4. d = [[0] * (n + 1) for _ in range(m + 1)]
    5. # 初始化第 1 列 其他字符到空字符的操作数
    6. for i in range(m + 1):
    7. d[i][0] = i
    8. # 初始化第 1 行 一个空字符到其他字符的操作数
    9. for j in range(n + 1):
    10. d[0][j] = j
    11. # 自底向上递推计算每个 d[i][j] 的值
    12. for i in range(1, m + 1):
    13. for j in range(1, n + 1):
    14. if string1[i - 1] == string2[j - 1]:
    15. d[i][j] = d[i - 1][j - 1]
    16. else:
    17. d[i][j] = min(d[i - 1][j], d[i][j - 1], d[i - 1][j - 1]) + 1
    18. # if i > 1 and j > 1 and string1[i - 1] == string2[j - 2] and string1[i - 2] == string2[j - 1]:
    19. # d[i][j] = min(d[i][j], d[i - 2][j - 2] + 1)
    20. return d[m][n]

  • 相关阅读:
    MATLAB科技绘图与数据分析
    js拼接页面元素,v-html多个指定位置文本高亮,为v-html拼接的字符串绑定onclick事件
    动态规划4(Leetcode746使用最小花费爬楼梯)
    java初学
    自定义数据字典工具类
    VXLAN内通信与EVPN
    弹窗示例(小白示例)
    Java基础五大机制 —— SPI机制基础(一)
    车载软件架构——基础软件供应商&开发工具链(一)
    Linux 日志系统
  • 原文地址:https://blog.csdn.net/qq_40709711/article/details/126372394