利用编辑距离计算字符串的相似度Python实现

学习记录 专栏收录该内容
49 篇文章 0 订阅

参考资料:
原文:编辑距离计算python实现 (作者:koibiki)

采用动态规划的思想,跟计算最长公共子串问题类似。
编辑距离是针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。

利用编辑距离计算相似度的概率f(x,y)
如果y为x的子串,则 f ( x , y ) = 1 f(x,y)=1 f(x,y)=1
否则: f ( x , y ) = 1 − e d i t ( x , y ) m a x ( l e n ( x ) , l e n ( y ) ) f(x,y)=1-\frac{edit(x,y)}{max(len(x),len(y))} f(x,y)=1max(len(x),len(y))edit(x,y)

Python实现:

#编辑距离是用来比较两个字符串之间相似度的度量方法,表示的是两个字符串间相互转换所需的最少步骤。
import numpy as np

def edit_distance(word1, word2):
    len1 = len(word1)
    len2 = len(word2)
    dp = np.zeros((len1 + 1, len2 + 1))
    for i in range(len1 + 1):
        dp[i][0] = i
    for j in range(len2 + 1):
        dp[0][j] = j

    for i in range(1, len1 + 1):
        for j in range(1, len2 + 1):
            temp = 0 if word1[i - 1] == word2[j - 1] else 1
            dp[i][j] = min(dp[i - 1][j - 1] + temp, min(dp[i - 1][j] + 1, dp[i][j - 1] + 1))
    return dp[len1][len2]

#假设 word1 > word2
def simility(word1, word2):
    if word2 in word1:
        return 1.0
    res = edit_distance(word1, word2)
    maxLen = max(len(word1),len(word2))
    return 1-res*1.0/maxLen

if __name__ == '__main__':
    res = simility('中国男子篮球职业联赛','中男篮职业联赛')
    print(res)#0.7
  • 3
    点赞
  • 0
    评论
  • 8
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页

打赏作者

长弓Smile

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值