Как ускорить Fuzzy Matching с помощью Fuzzywuzzy в Python - PullRequest
1 голос
/ 14 апреля 2019

Я использую Fuzzywuzzy в Python для сопоставления имен людей в 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 часов, я не хочу прерывать текущую работу, поэтому после этого я попробую.

Мне интересно, есть ли другие способы улучшить это.

Заранее спасибо.

...