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

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

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

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,兩個庫均可實現(xiàn)詞粒度的模糊匹配,同時可設(shè)定模糊閾值,實現(xiàn)關(guān)鍵詞的提取、地址匹配、語法檢查等

fuzzywuzzy

pip install fuzzywuzzy
 
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

fuzzy模塊

(1)模糊匹配方法

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

(2)實例

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,返回的是列表,其中會包含很多匹配的數(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ù),可以通過下面的示例和兩個實戰(zhàn)應(yīng)用體會一下

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

difflib

Difflib作為python的標準庫,difflib模塊提供的類和方法用來進行序列的差異化比較,它能夠比對文件并生成差異結(jié)果文本或者html格式的差異化比較頁面,而且支持輸出可讀性比較強的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è)銀行']

擴展——文件比較

(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文件) ,兩邊對應(yīng)展示或者行對行的展示比對差異結(jié)果。以上兩個方法都可以用來生成包含一個內(nèi)容為比對結(jié)果的表格的html文件,并且部分內(nèi)容會高亮顯示。

(3)context_diff

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

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

>>> 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) 比對兩個文件,然后生成一個展示差異結(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多用于文本的差異比較,用于模糊匹配精度還是不太準的,一般詞的模糊匹配可用fuzzywuzzy

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

相關(guān)文章

最新評論

乌鲁木齐市| 察隅县| 淮北市| 乌兰察布市| 临洮县| 郎溪县| 五大连池市| 英吉沙县| 巴林右旗| 聊城市| 临洮县| 荥经县| 秭归县| 长寿区| 龙游县| 乌什县| 星座| 阿尔山市| 疏勒县| 卢氏县| 兴国县| 靖边县| 加查县| 安庆市| 山阳县| 克山县| 定州市| 龙口市| 临泽县| 灵川县| 舟山市| 壤塘县| 宕昌县| 武夷山市| 福泉市| 东台市| 西青区| 珲春市| 巴马| 喀喇沁旗| 泸溪县|