使用Python完成公司名稱和位址的模糊匹配的實現

2022-09-28 05:33:08 字數 3467 閱讀 2266

github主頁

匯入:>>> from fuzzywuzzy import fuzz

>>> from fuzzywuzzy import process

1)>>> fuzz.ratio("this is a test", "this is a test!")

out 97

>>> fuzz.partial_ratio("this is a test", "this is a test!")

out 100

fuzz.ratio()對位置敏感,全匹配。fuzz.partial_ratio()對位置敏感,搜尋匹配。

2)>>> fuzz._process_and_sort(s, force_ascii, full_process=true)

對字串s排序。force_ascii:true 或者false。為true表示轉換為ascii碼。如果full_process為true,則會將字串s轉換為小寫,去掉除字母和數字之外的字元(發現不能去程式設計客棧掉-字元),剩下的字串以空格分開,然後排序。如果為false,則直接對字串s排序。

>>> fuzz._token_sort(s1, s2, partial=true, force_ascii=true, full_process=true)

給出字串 s1, s2的相似度。首先經過 fuzz._process_and_sort()函式處理。partial為true時,再經過fuzz.partial_ratio()函式。partial為false時,再經過fuzz.ratio()函式。

>>> fuzz.token_sort_ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")

out 100

partial為false的_token_sort()

fuzz.partial_token_sort_ratio(s1, s2,程式設計客棧 force_ascii=true, full_process=true)

就是partial為true時的fuzz._token_sort()

3)>>> fuzz.token_set_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")

out 100

fuzz._token_set(s1, s2, partial=true, force_ascii=true, full_process=true)

當partial為false時,就是 fuzz.token_set_ratio()函式。

fuzz.partial_token_set_ratio(s1, s2, force_ascii=true, full_process=true)

partial為true的fuzz._token_set()函式。

4)fuzz.qratio(s1, s2, force_ascii=true, full_process=true)

full_process為true時,經過utils.full_process()函式。然後經過fuzz.ratio()函式。對順序敏感。

fuzz.uqratio(s1, s2, full_process=true)

就是 force_ascii為false的fuzz.qratio()函式。

fuzz.wratio(s1, s2, force_ascii=true, full_process=true)

使用另一種不同演算法計算相似度。對順序敏感。

uwratio(s1, s2, full_p程式設計客棧rocess=true)

是force_ascii為false的fuzz.wratio()函式。

總結:如果計算相似度的字串只有字母和數字,直接可以用ratio()和partial_ratio()。但如果還有其他字元,而且我們想要去掉這些沒用字元,就用下邊的。下邊的函式都對順序不敏感,但token_sort_ratio()系列是全字元匹配,不管順序。而token_set_ratio()只要第二個字串包含第乙個字串就100,不管順序。

5)>>> choices = ["atlanta falcons", "new york jets", "new york giants", "dallas cowboys"]

>>> process.extract("new york jets", choices, limit=2)

[('new york jets', 100), ('new york giants', 78)]

>>> process.extractone("cowboys", choices)

("dallas cowboys", 90)

>>> process.extract(query, choices, processor=default_processor, scorer=default_scorer, limit=5)

query是字串,choices是陣列,元素是字串。 processor是對輸入比較的字串的處理函式,預設是fuzzywuzzy.utils.full_process(),即將字串變為小寫, 去掉除字母和數字之外的字元(發現不能去掉-字元),剩下的字串以空格分開。scorer計算兩個字串相似度的函式,預設fuzz.wratio()。 limit是輸出個數。

輸出為陣列,元素為元組,元祖第乙個匹配到的字串,第二個為int型,為score。對輸出按照score排序。

>>> process.extractwithoutorder(query, choices, procewww.cppcns.comssor=default_processor, scorer=default_scorer, score_cutoff=0)

score_cutoff為乙個閾值,當score小於該閾值時,不會輸出。返回乙個生成器,輸出每個大於 score_cutoff的匹配,按順序輸出,不排序。

>>> process.extractbests(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0, limit=5)

process.extractbests()和process.extract()都呼叫了proce程式設計客棧ss.extractwithoutorder(),只不過process.extractbests()能傳輸 score_cutoff。

>>> process.extractone(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0)

也呼叫了process.extractwithoutorder(),只不過輸出乙個score最高的值。

process.dedupe(contains_dupes, threshold=70, scorer=fuzz.token_set_ratio)

contains_dupes是陣列,元素為字串。

取出相似度小於 threshold的字串,相似度大於 threshold的字串取最長乙個。

本文位址:

公司名稱字尾 Inc Co ,Ltd

inc.incorporated co.ltd.連在一起為company limited,就是 或者有限責任公司。co 後面的 是英文中表示詞語短縮省略的符號,而 co.後面的 則是用來區分前後兩個詞的分離號 乙個公司如果上市或者比較大了,都會在公司名稱的字尾上加inc.llc.全拼是limited...

正則匹配公司名稱

x x da za z u 上面是php匹配,變為js匹配很簡單 u4e00 u9fa5 da za z gi因為有的公司帶有 括號 和 或 數字 英文本元,比如tcl,多奈鞋業 中國 北京奇虎360科技 香港等公司命名可能帶有 但是,企業名稱登記管理規定 這部法規是1991年才首次頒布的,即使是在...

通過公司名稱獲取公司關鍵詞

大部分公司名稱的組成分為以下幾個部分 地區 名稱 公司型別 江西五維實業 深圳康泰生物製品股份 hanlp 的詞性對照表 地點 ns 和機構字尾 nis 都可以標註出來。如下面 所示,from pyhanlp import string 錫林郭勒 應急保障中心 words tostring for ...