[英]How to fix incorrect fuzzy-matches with over 90 thresholds?
我有兩個數據集,我需要模糊匹配包含組織名稱的列。 我在Python中使用了fuzzywuzzy庫並設置了閾值50(參見下面的代碼)。 代碼成功匹配了一些名稱。 當我看到比賽時,我意識到了一個問題。 問題是有一些匹配90閾值但兩個名稱完全不同。
例如,以下兩個名稱與91匹配:
“PARIS HEALTH CORPORATION”和“LONDON HEALTCARE CORPORATION”
(我用保密的方式取代了巴黎和倫敦的第一句話)。
我想知道如何以正確的方式匹配這些類型的比賽?
另外兩個數據集也有地址和郵政編碼,但我還沒有使用地址來匹配兩個數據集。
我從這個頁面得到了代碼。
from fuzzywuzzy import fuzz
def match_name(name, list_names, min_score=0):
max_score = -1
max_name = ""
for name2 in list_names:
score = fuzz.ratio(name, name2)
if (score > min_score) & (score > max_score):
max_name = name2
max_score = score
return (max_name, max_score)
dict_list = []
for name in df.SYSNAME:
match = match_name(name, df1.PAYER_NAME, 50)
dict_ = {}
dict_.update({"SYSNAME" : name})
dict_.update({"match_name" : match[0]})
dict_.update({"score" : match[1]})
dict_list.append(dict_)
merge_table = pd.DataFrame(dict_list)
由於在fuzzywuzzy庫后面建立的模型,這匹配率為91%。 我猜你改變的詞而不是巴黎和倫敦甚至有共同的字母。
在您的示例中,我認為您應該:1)根據本地化拆分您的公司列表2)運行模型3)將結果追加到一起
如果您的公司不在多個地點,這將避免此問題。
如果是,那么您可以從公共元素中剝離公司名稱:
remove_words = ["healthcare", "corporations", "llc", "corp", "parnters"]
for i in remove_words:
corp['corporation'] = corp['corporation'].str.replace(i, "", case = False)
這樣,當您運行模型時,它會在對您重要的單詞上運行它。
我希望它有所幫助。 BR。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.