簡體   English   中英

如何修復超過90個閾值的錯誤模糊匹配?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM