1. 程式人生 > 程式設計 >python 已知一個字元,在一個list中找出近似值或相似值實現模糊匹配

python 已知一個字元,在一個list中找出近似值或相似值實現模糊匹配

已知一個元素,在一個list中找出相似的元素

使用場景:

已知一個其它來源的字串,它有可能是不完全與我資料庫中相應的字串匹配的,因此,我需要將其轉為適合我資料庫中的字串

使用場景太繞了,直接舉例來說吧

隨便舉例:

按青島城市的城區來說,

我資料庫中儲存的城區是個list:['市北區','市南區','萊州市','四方區']等

從其它的資料來源得到一個城區是:市北

我怎麼得到與市北相似相近的市北區

解決方案:

In [1]: import difflib

In [2]: cityarea_list = ['市北區','四方區']
# 正常情況下,我是這麼用的
In [3]: a = difflib.get_close_matches('市北',cityarea_list,1,cutoff=0.7)

In [4]: a
Out[4]: ['市北區']
# 測試關鍵字改為市區,且要求返回相似度最高的兩個元素
In [5]: a = difflib.get_close_matches('市區',2,cutoff=0.7)

In [6]: a
Out[6]: ['市南區','市北區']
# 測試關鍵字改為市區,要求返回相似度最高的一個元素
In [7]: a = difflib.get_close_matches('市區',cutoff=0.7)

In [8]: a
Out[8]: ['市南區']

詳解:

difflib是python 自帶的一個方法

返回的結果是個list

返回的list元素數量是可控的,

cutoff引數是0到1的浮點數,可以除錯模糊匹配的精度,一般為0.6就可以了,1為精確匹配,

補充拓展:python列表進行模糊查詢

先看一下程式碼

a=['時間1','時間2','時間3','ab','asds']
dd = [i for i,x in enumerate(a) if x.find('s')!=-1]
print(dd)

需要注意的是這個方法只適合與都是字串的,因為find是字串重的方法, 如果list中有數字和None,都是不行的

以上這篇python 已知一個字元,在一個list中找出近似值或相似值實現模糊匹配就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。