如何在Python中使用Fuzzywuzzy加快模糊匹配

时间:2019-04-14 15:08:28

标签: python runtime levenshtein-distance fuzzywuzzy

我正在Python中使用Fuzzywuzzy来匹配2个列表中的人物姓名。但是,运行时太长,一个列表包含25000个名称,另一个列表包含39000个名称。现在已经运行了20个小时。

以前,我使用相同的代码来匹配2个具有6000和3000个名称的列表,运行时间为1小时。基于此,我当前工作的运行时间将超过50小时。

下面是我的代码:

names_array=[]
ratio_array=[]
def match_names(wrong_names,correct_names):
    for row in wrong_names:
        x=process.extractOne(row, correct_names, scorer=fuzz.token_set_ratio)
        names_array.append(x[0])
        ratio_array.append(x[1])
    return names_array,ratio_array

df=pd.read_csv("wrong-country-names.csv",encoding="ISO-8859-1")
wrong_names=df['name'].dropna().values

choices_df=pd.read_csv("country-names.csv",encoding="ISO-8859-1")
correct_names=choices_df['name'].values

name_match,ratio_match=match_names(wrong_names,correct_names)

我选择fuzz.token_set_ratio作为得分手,根据我拥有的数据执行此多对多比赛。

下面是示例数据:

wrong_names = ['Alberto Steve', 'David Lee']
correct_names = ['Alberto Lee Steve', 'David Steve Lee'] 

基本上,错误的名称列表不包含中间名,为了忽略该中间名并生成合理的匹配项,我选择了fuzz.token_set_ratio

通过在线研究,我找到了安装python levenshtein软件包的解决方案,可以将运行时间加快4到10倍。但是,我的工作已经运行了20多个小时,我不想破坏当前的工作,因此在此之后我会尝试一下。

我想知道是否还有其他选择可以改善这一点。

谢谢。

0 个答案:

没有答案