用Python计算字符串的相似度

准备做一个小功能,需要计算字符串的相似度,提前做点功课。


算法

字符串相似度的算法以及有很多资料了。最常见的理解就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数。AKA,两个字符串之间的距离。解这样一个问题,可以使用穷举法,也可以使用动态规划,大家可以自行搜索。贪婪法不适合这个问题。


python-Levenshtein

我需要使用python完成相似度的计算,因而选择了python-Levenshtein。python-Levenshtein的常用函数包括:

1) Levenshtein.hamming(str1, str2)
计算 汉明距离。 要求str1和str2必须长度一致。是描述两个等长字串之间 对应 位置上 不同 字符的个数。

2)Levenshtein.distance(str1, str2)
计算 编辑距离 (也称为Levenshtein距离 )。是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括 插入 、 删除 、 替换 。
3)Levenshtein.ratio(str1, str2)
计算莱文斯坦比。计算公式  r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的长度总和,ldist是 类编辑距离。
注意 :这里的类编辑距离不是2中所说的编辑距离,2中三种操作中每个操作+1,而在此处,删除、插入依然+1,但是替换+2。这样设计的目的:ratio('a', 'c'),sum=2,按2中计算为(2-1)/2 = 0.5,’a','c'没有重合,显然不合算,但是替换操作+2,就可以解决这个问题。


测试结果

Distance
360-lobby:360-loby                           1
360-guest:360_guest                      1
ICBC Free:ICBC Secure                  5
ICBC_Sec:@ICBC                            5
ICBC:IBCC                                         2
ICBC:CBCI                                         2
ICBC:IICCBBCC                               4
ICBC:ICBCICBC                               4

Ratio
360-lobby:360-loby                         0.941176
360-guest:360_guest                    0.888889
ICBC Free:ICBC Secure                0.700000
ICBC_Sec:@ICBC                          0.615385
ICBC:IBCC                                       0.750000
ICBC:CBCI                                       0.750000
ICBC:IICCBBCC                             0.666667
ICBC:ICBCICBC                             0.666667


  • 2
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

davidchang365

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

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

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

打赏作者

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

抵扣说明:

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

余额充值