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