最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+fuzzywuzzy計(jì)算兩個(gè)字符串之間的相似度

 更新時(shí)間:2022年09月27日 09:10:44   作者:古明地覺(jué)  
fuzzywuzzy?可以計(jì)算兩個(gè)字符串之間的相似度,它依據(jù)?Levenshtein?Distance?算法來(lái)進(jìn)行計(jì)算,該算法又叫?Edit?Distance?算法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

fuzzywuzzy 可以計(jì)算兩個(gè)字符串之間的相似度,它依據(jù) Levenshtein Distance 算法來(lái)進(jìn)行計(jì)算。該算法又叫 Edit Distance 算法,是指兩個(gè)字符串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需要的最少編輯操作次數(shù)。許可的編輯操作包括將一個(gè)字符替換成另一個(gè)字符,插入一個(gè)字符,刪除一個(gè)字符。一般來(lái)說(shuō),編輯距離越小,兩個(gè)串的相似度越高。

我們來(lái)看一下該模塊的用法,非常簡(jiǎn)單:

from?fuzzywuzzy?import?fuzz

#?調(diào)用?fuzz.ratio?即可計(jì)算兩個(gè)字符串的相似度
print(
????fuzz.ratio("古明地覺(jué)",?"古明地戀")
)??#?75

#?我們看到?ratio?是完全匹配的
#?它把字符串的長(zhǎng)度也考慮在內(nèi)了
print(
????fuzz.ratio("古明地覺(jué)",?"古明地覺(jué)aa")
)??#?80

#?partial_ratio是非完全匹配
#?如果一方結(jié)束了,那么剩下的就不考慮了
print(
????fuzz.partial_ratio("古明地覺(jué)",?"古明地覺(jué),小五蘿莉")
)??#?100

#?token_sort_ratio表示忽略順序匹配
#?但前提是多個(gè)詞,以空格進(jìn)行分隔
print(
????fuzz.ratio("古?明?地?覺(jué)",?"古?明?地?覺(jué)"[::?-1])
)??#?25
print(
????fuzz.token_sort_ratio("古?明?地?覺(jué)",?"古?明?地?覺(jué)"[::?-1])
)??#?100

#?token_set_ratio表示去重匹配
#?同樣:前提是多個(gè)詞,以空格進(jìn)行分隔
print(fuzz.ratio("a?a?a?he",?"a?he"))??#?67
print(
????fuzz.token_set_ratio("a?a?a?he",?"a?he")
)??#?100

當(dāng)我們使用 git 的時(shí)候,如果命令輸錯(cuò)了,那么會(huì)告訴你此命令不是一個(gè) git 命令,這是理所應(yīng)當(dāng)?shù)摹H缓笾攸c(diǎn)來(lái)了,git 還會(huì)提示一些與你輸錯(cuò)的命令長(zhǎng)得非常相似的一些命令。

所以這里面也用到了字符串的相似度原理,找出 git 命令中和你輸錯(cuò)的命令最相似的幾個(gè),然后進(jìn)行提示。

如果我們也寫(xiě)了一個(gè)類似的程序,需要用戶通過(guò)命令行參數(shù)的方式,那么當(dāng)用戶輸入了一個(gè)不存在的命令時(shí),我們也可以這么做。而實(shí)現(xiàn)方法也很簡(jiǎn)單,就是將所有的命令和用戶輸錯(cuò)的命令都計(jì)算一個(gè)相似度,然后返回相似度最高的 n 個(gè)即可。

使用上面的 fuzz 完全可以實(shí)現(xiàn),當(dāng)然 fuzzywuzzy 模塊還提供了一個(gè) extract 函數(shù),可以讓我們更加輕松地做到這一點(diǎn)。

from?fuzzywuzzy?import?process

words?=?["hello?python",?"hello?java",?
?????????"hello?golang",?"hello?php"]
#?會(huì)自動(dòng)和?words?里面的每一個(gè)元素進(jìn)行比較
#?然后按照相似度從高到低排列
print(process.extract("hello?thon",?words))
"""
[('hello?python',?91),?('hello?php',?74),?
?('hello?golang',?73),?('hello?java',?64)]
"""

#?還可以傳入一個(gè)?limit?參數(shù)
#?表示只返回前?limit?個(gè),默認(rèn)為5
print(
????process.extract("hello?thon",?words,?limit=2)
)?
"""
[('hello?python',?91),?
?('hello?php',?74)]
"""

#?返回分?jǐn)?shù)最高的,此時(shí)返回一個(gè)元組
print(
????process.extractOne("hello?thon",?words)
)??
"""
('hello?python',?91)
"""

這個(gè)模塊使用起來(lái)還是比較簡(jiǎn)單的,當(dāng)然核心是字符串相似度的計(jì)算原理,這才是重點(diǎn),有興趣可以去了解一下。

另外使用 fuzzywuzzy 這個(gè)模塊的時(shí)候,會(huì)彈出一個(gè)警告:

UserWarning: Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning

提示我們可以通過(guò)安裝 python-Levenshtein 得到解決,這是一個(gè)用于加速字符串匹配的庫(kù),可提供 4 到 10 倍的加速。當(dāng)然即使沒(méi)有這個(gè)庫(kù)也是可以的,沒(méi)有的話 fuzzywuzzy 底層會(huì)使用標(biāo)準(zhǔn)庫(kù) difflib 進(jìn)行匹配,只是會(huì)彈出警告罷了。

到此這篇關(guān)于Python+fuzzywuzzy計(jì)算兩個(gè)字符串之間的相似度的文章就介紹到這了,更多相關(guān)Python fuzzywuzzy內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

项城市| 东兰县| 黑水县| 庆云县| 偏关县| 龙南县| 香河县| 镇赉县| 临城县| 黔东| 明星| 封开县| 株洲县| 永定县| 正安县| 敖汉旗| 玛沁县| 宿州市| 梅州市| 永登县| 常山县| 舒兰市| 合川市| 漯河市| 平邑县| 嘉峪关市| 永靖县| 蓬溪县| 綦江县| 武隆县| 凤山市| 大厂| 兰坪| 息烽县| 宜春市| 保德县| 兰州市| 南部县| 金平| 都匀市| 台安县|