欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 模糊匹配搜索問(wèn)題

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

fuzzywuzzy

pip install fuzzywuzzy
 
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

fuzzy模塊

(1)模糊匹配方法

  • ratio()——簡(jiǎn)單匹配,使用純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() 簡(jiǎn)單匹配

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ù)

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

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

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

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

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

difflib

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

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

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

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

(1)difflib.Differ

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

(2)difflib.HtmlDiff

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

 此類(lèi)可以被用來(lái)創(chuàng)建HTML表格 (或者說(shuō)包含表格的html文件) ,兩邊對(duì)應(yīng)展示或者行對(duì)行的展示比對(duì)差異結(jié)果。以上兩個(gè)方法都可以用來(lái)生成包含一個(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)文章

  • Anaconda如何查看自己目前安裝的包詳解

    Anaconda如何查看自己目前安裝的包詳解

    Anaconda是一種用于數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的開(kāi)源發(fā)行版,它包含了很多常用的Python包和工具,如NumPy、Pandas、Scipy、Scikit-Learn等,下面這篇文章主要給大家介紹了關(guān)于Anaconda如何查看自己目前安裝的包的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 100?個(gè)?Python?小例子(練習(xí)題四)

    100?個(gè)?Python?小例子(練習(xí)題四)

    這篇文章主要給大家分享100?個(gè)?Python?小例子,前文分享了一二三,本文的四十最后一篇了,這篇就把100道python小練習(xí)全分享完了,感興趣的小伙伴也可以去練習(xí)前幾期內(nèi)容,洗碗給這幾篇文章給你的學(xué)習(xí)帶來(lái)幫助
    2022-01-01
  • python簡(jiǎn)單實(shí)現(xiàn)9宮格圖片實(shí)例

    python簡(jiǎn)單實(shí)現(xiàn)9宮格圖片實(shí)例

    在本篇內(nèi)容里小編給各位分享的是一篇關(guān)于python實(shí)現(xiàn)朋友圈中的九宮格圖片的實(shí)例講解,有需要的朋友們可以參考下。
    2020-09-09
  • OpenCV利用手勢(shì)識(shí)別實(shí)現(xiàn)虛擬拖放效果

    OpenCV利用手勢(shì)識(shí)別實(shí)現(xiàn)虛擬拖放效果

    這篇文章主要介紹了利用OpenCV實(shí)現(xiàn)手勢(shì)識(shí)別,從而進(jìn)行虛擬拖放效果,我們可以使用這個(gè)技術(shù)實(shí)現(xiàn)一些游戲,控制機(jī)械臂等很多有趣的事情。感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • 關(guān)于opencv讀取和寫(xiě)入路徑有漢字的處理方式

    關(guān)于opencv讀取和寫(xiě)入路徑有漢字的處理方式

    這篇文章主要介紹了關(guān)于opencv讀取和寫(xiě)入路徑有漢字的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 讓python json encode datetime類(lèi)型

    讓python json encode datetime類(lèi)型

    python2.6+ 自帶的json模塊,不支持datetime的json encode,每次都需要手動(dòng)轉(zhuǎn)為字符串,很累人,我們可以自己封裝一個(gè)簡(jiǎn)單的方法處理此問(wèn)題。
    2010-12-12
  • python爬蟲(chóng) 正則表達(dá)式解析

    python爬蟲(chóng) 正則表達(dá)式解析

    這篇文章主要介紹了python爬蟲(chóng) 正則表達(dá)式解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Linux安裝Python3如何和系統(tǒng)自帶的Python2并存

    Linux安裝Python3如何和系統(tǒng)自帶的Python2并存

    這篇文章主要介紹了Linux安裝Python3如何和系統(tǒng)自帶的Python2并存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python中內(nèi)置函數(shù)ord()返回字符串的ASCII數(shù)值實(shí)例詳解

    python中內(nèi)置函數(shù)ord()返回字符串的ASCII數(shù)值實(shí)例詳解

    ord()?函數(shù)是?chr()?函數(shù)(對(duì)于?8?位的?ASCII?字符串)的配對(duì)函數(shù),它以一個(gè)字符串(Unicode?字符)作為參數(shù),返回對(duì)應(yīng)的?ASCII?數(shù)值,或者?Unicode?數(shù)值,這篇文章主要介紹了python?中內(nèi)置函數(shù)ord()返回字符串的ASCII數(shù)值,需要的朋友可以參考下
    2022-07-07
  • 講解如何利用 Python完成 Saga 分布式事務(wù)

    講解如何利用 Python完成 Saga 分布式事務(wù)

    這篇文章主要介紹了如何利用 Python 完成一個(gè) Saga 的分布式事務(wù),需要的朋友可以參考下面文章具體的內(nèi)容
    2021-09-09

最新評(píng)論