Python 比較文本相似性的方法(difflib,Levenshtein)
最近工作需要用到序列匹配,檢測(cè)相似性,不過(guò)有點(diǎn)復(fù)雜的是輸入長(zhǎng)度是不固定的,舉例為:
input_and_output = [1, 2, '你好', 世界', 12.34, 45.6, -21, '中國(guó)', '美麗']
其中,需要從input_and_output 中選取不固定長(zhǎng)度的一段作為輸入,且順序不定,然后去與總體進(jìn)行比較,找出最符合的,開(kāi)始是對(duì)漢字進(jìn)行數(shù)值化編碼,不過(guò)后來(lái)由于出現(xiàn)漢字越來(lái)越多,遂放棄該方法,轉(zhuǎn)向別的方式,查找資料發(fā)現(xiàn)了兩個(gè)python包廣被推薦,從下面來(lái)看各有優(yōu)缺點(diǎn),記錄之~
1、difflib
import difflib #python 自帶庫(kù),不需額外安裝 In [49]: test1 Out[49]: ['你好', '我是誰(shuí)'] In [50]: test2 Out[50]: ['你好啊', '我誰(shuí)'] In [51]: test3 Out[51]: [12, 'nihao'] In [52]: test4 Out[52]: ['你好', 'woshi'] In [53]: difflib.SequenceMatcher(a=test1, b=test2).quick_ratio() Out[53]: 0.0 In [54]: difflib.SequenceMatcher(a=test1, b=test4).ratio() Out[54]: 0.5
2、Levenshtein
#pip install python-Levenshtein import Levenshtein In [56]: Levenshtein.distance(','.join(test1), ','.join(test2)) Out[56]: 2 In [57]: Levenshtein.distance(','.join(test1), ','.join(test4)) Out[57]: 5
簡(jiǎn)單來(lái)說(shuō),difflib使用時(shí)不一定為字符串,但匹配時(shí)只有單個(gè)元素完全匹配才計(jì)入,
而Levenshtein則需要輸入為字符串,匹配時(shí)是整體匹配(也可能跟把所有元素集中成一個(gè)字符串有關(guān),具體待繼續(xù)使用再摸索)
以上這篇Python 比較文本相似性的方法(difflib,Levenshtein)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python ORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例
這篇文章主要介紹了Python ORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例,Classic (經(jīng)典模式)和Modern (現(xiàn)代模式),分別介紹了,需要的朋友可以參考下2014-06-06python實(shí)現(xiàn)支付寶當(dāng)面付(掃碼支付)功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)支付寶當(dāng)面付,掃碼支付功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05用Python在Excel里畫(huà)出蒙娜麗莎的方法示例
這篇文章主要介紹了用Python在Excel里畫(huà)出蒙娜麗莎的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04淺談python for循環(huán)的巧妙運(yùn)用(迭代、列表生成式)
下面小編就為大家?guī)?lái)一篇淺談python for循環(huán)的巧妙運(yùn)用(迭代、列表生成式)。2017-09-09python實(shí)現(xiàn)ModBusTCP協(xié)議的client功能
Modbus TCP 是一種基于 TCP/IP 協(xié)議棧的 Modbus 通信協(xié)議,它用于在工業(yè)自動(dòng)化系統(tǒng)中進(jìn)行設(shè)備之間的通信,只要通過(guò)pymodbus或pyModbusTCP任意模塊就可以實(shí)現(xiàn),本文采用pymodbus,感興趣的朋友跟隨小編一起看看吧2023-10-10Python+OpenCV實(shí)現(xiàn)車(chē)牌字符分割和識(shí)別
這篇文章主要為大家詳細(xì)介紹了Python+OpenCV實(shí)現(xiàn)車(chē)牌字符分割和識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Python統(tǒng)計(jì)文本詞匯出現(xiàn)次數(shù)的實(shí)例代碼
這篇文章主要介紹了Python統(tǒng)計(jì)文本詞匯出現(xiàn)次數(shù),這種問(wèn)題在統(tǒng)計(jì)文本詞匯的次數(shù)時(shí)經(jīng)常會(huì)遇到,今天給大家分享解決方案,通過(guò)實(shí)例代碼給大家講解,需要的朋友可以參考下2020-02-02從多個(gè)tfrecord文件中無(wú)限讀取文件的例子
今天小編就為大家分享一篇從多個(gè)tfrecord文件中無(wú)限讀取文件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02