python计算字符串相似度,用Python計算字符串的相似度

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 12:43   152   0

准備做一個小功能,需要計算字符串的相似度,提前做點功課。

算法

字符串相似度的算法以及有很多資料了。最常見的理解就是:把一個字符串通過插入、刪除或替換這樣的編輯操作,變成另外一個字符串,所需要的最少編輯次數。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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP