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

Python3如何實(shí)現(xiàn)列表模糊匹配列表

 更新時(shí)間:2022年11月02日 08:54:33   作者:丫丫博客  
這篇文章主要介紹了Python3如何實(shí)現(xiàn)列表模糊匹配列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python3列表模糊匹配列表

B列表模糊匹配A列表

a = ['123','666','355']
b = ['2','5']
for i in range(len(b)):
    for j in range(len(a)):
        if a[j].find(b[i]) == -1:
            continue
        print(a[j])

執(zhí)行結(jié)果:

在這里插入圖片描述

Python 模糊匹配搜索問題

利用python庫:fuzzywuzzydifflib,兩個(gè)庫均可實(shí)現(xiàn)詞粒度的模糊匹配,同時(shí)可設(shè)定模糊閾值,實(shí)現(xiàn)關(guān)鍵詞的提取、地址匹配、語法檢查等

fuzzywuzzy

pip install fuzzywuzzy
 
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

fuzzy模塊

(1)模糊匹配方法

  • ratio()——簡單匹配,使用純Levenshtein Distance進(jìn)行匹配。
  • partial_ratio()——非完全匹配,基于最佳的子串(substrings)進(jìn)行匹配
  • token_set_ratio——忽略順序匹配,對(duì)字符串進(jìn)行標(biāo)記(tokenizes)并在匹配之前按字母順序?qū)λ鼈冞M(jìn)行排序 
  • token_set_ratio——去重子集匹配,對(duì)字符串進(jìn)行標(biāo)記(tokenizes)并比較交集和余數(shù) 

(2)實(shí)例

ratio() 簡單匹配

fuzz.ratio("河南省", "河南省")
>>> 100
 
fuzz.ratio("河南", "河南省")
>>> 80

partial_ratio() 非完全匹配

fuzz.partial_ratio("河南省", "河南省")
>>> 100
 
fuzz.partial_ratio("河南", "河南省")
>>> 100

token_set_ratio() 忽略順序匹配

fuzz.ratio("西藏 自治區(qū)", "自治區(qū) 西藏")
>>> 50
fuzz.ratio('I love YOU','YOU LOVE I')
>>> 30
 
fuzz.token_sort_ratio("西藏 自治區(qū)", "自治區(qū) 西藏") 
>>> 100
fuzz.token_sort_ratio('I love YOU','YOU LOVE I') 
>>> 100

token_set_ratio() 去重子集匹配

fuzz.ratio("西藏 西藏 自治區(qū)", "自治區(qū) 西藏")
>>> 40
 
fuzz.token_sort_ratio("西藏 西藏 自治區(qū)", "自治區(qū) 西藏")
>>> 80
 
fuzz.token_set_ratio("西藏 西藏 自治區(qū)", "自治區(qū) 西藏")
>>> 100

process模塊

(1) extract提取多條數(shù)據(jù)

類似于爬蟲中select,返回的是列表,其中會(huì)包含很多匹配的數(shù)據(jù)

choices = ["河南省", "鄭州市", "湖北省", "武漢市"]
process.extract("鄭州", choices, limit=2)
>>> [('鄭州市', 90), ('河南省', 0)]
# extract之后的數(shù)據(jù)類型是列表,即使limit=1,最后還是列表,注意和下面extractOne的區(qū)別

(2)extractOne提取一條數(shù)據(jù)

提取匹配度最大的結(jié)果,返回 元組 類型, 還有就是匹配度最大的結(jié)果不一定是我們想要的數(shù)據(jù),可以通過下面的示例和兩個(gè)實(shí)戰(zhàn)應(yīng)用體會(huì)一下

process.extractOne("鄭州", choices)
>>> ('鄭州市', 90)
 
process.extractOne("北京", choices)
>>> ('湖北省', 45)

difflib

Difflib作為python的標(biāo)準(zhǔn)庫,difflib模塊提供的類和方法用來進(jìn)行序列的差異化比較,它能夠比對(duì)文件并生成差異結(jié)果文本或者h(yuǎn)tml格式的差異化比較頁面,而且支持輸出可讀性比較強(qiáng)的HTML文檔

(0)get_close_matches(word, possibilities, n=3, cutoff=0.6)

import difflib
config_list = ['中國工商銀行','中國農(nóng)業(yè)銀行','建設(shè)銀行','中國人民銀行','招商證券','中國農(nóng)業(yè)發(fā)展銀行']
query_word = '農(nóng)行'
 
res = difflib.get_close_matches(query_word, config_list, 1, cutoff=0.5)
print(res)
>>>['中國農(nóng)業(yè)銀行']

擴(kuò)展——文件比較

(1)difflib.Differ

此類比較的是文本行的差異并且產(chǎn)生適合人類閱讀的差異結(jié)果或者增量結(jié)果,結(jié)果中各部分的表示如下:

(2)difflib.HtmlDiff

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
 
make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

 此類可以被用來創(chuàng)建HTML表格 (或者說包含表格的html文件) ,兩邊對(duì)應(yīng)展示或者行對(duì)行的展示比對(duì)差異結(jié)果。以上兩個(gè)方法都可以用來生成包含一個(gè)內(nèi)容為比對(duì)結(jié)果的表格的html文件,并且部分內(nèi)容會(huì)高亮顯示。

(3)context_diff

difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

比較a與b(字符串列表),并且返回一個(gè)差異文本行的生成器

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)  
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido

(4) 比對(duì)兩個(gè)文件,然后生成一個(gè)展示差異結(jié)果的HTML文件

import difflib
hd = difflib.HtmlDiff()
file1 = ''
with open('xxx1.py','r') as load:
    file1 = load.readlines()
    load.close()
 
file2 = ''
with open('xxx2', 'r') as mem:
    file2 = mem.readlines()
    mem.close()
 
with open('htmlout.html','a+') as fo:
    fo.write(hd.make_file(file1,file2))
    fo.close()

總結(jié):difflib多用于文本的差異比較,用于模糊匹配精度還是不太準(zhǔn)的,一般詞的模糊匹配可用fuzzywuzzy

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

邵阳市| 新源县| 久治县| 鄂尔多斯市| 图木舒克市| 台中县| 河南省| 长宁县| 通州市| 永顺县| 乌鲁木齐县| 邛崃市| 仪征市| 梧州市| 铁岭市| 桂平市| 克什克腾旗| 韶关市| 县级市| 台北市| 新河县| 伊宁市| 育儿| 盐山县| 芜湖县| 大方县| 车险| 额敏县| 梁河县| 荆门市| 崇明县| 阜宁县| 柞水县| 屯昌县| 响水县| 博湖县| 微山县| 苗栗县| 许昌县| 宝鸡市| 萝北县|