【发布时间】: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