【问题标题】:How to fix incorrect fuzzy-matches with over 90 thresholds?如何修复超过 90 个阈值的不正确模糊匹配?
【发布时间】:2019-09-06 01:19:26
【问题描述】:

我有两个数据集,我需要对包含组织名称的列进行模糊匹配。我在 Python 中使用了fuzzywuzzy 库并将阈值设置为50(参见下面的代码)。该代码成功匹配了一些名称。当我观察比赛时,我意识到了一个问题。问题是有些匹配的阈值为 90,但两个名称完全不同。

比如下面这两个名字与91匹配:

“PARIS HEALTH CORPORATION”“LONDON HEALTCARE CORPORATION”

(我将第一个词替换为 Paris 和 London 以表示保密)。

我想知道如何以正确的方式匹配这些类型的匹配项?

另外两个数据集也有地址和邮政编码,但我还没有使用地址来匹配两个数据集。

我从this page获得了代码。

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)

【问题讨论】:

    标签: python string-matching fuzzy-search fuzzy-comparison fuzzywuzzy


    【解决方案1】:

    由于在 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。

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 2012-04-30
      • 2017-09-11
      • 2010-10-25
      • 2021-01-26
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多