Нечеткое совпадение строк в Python
У меня есть 2 списка из более чем миллиона имен с немного различными соглашениями об именах. Цель здесь - сопоставить те записи, которые похожи, с логикой 95% достоверности.
Мне стало известно, что есть библиотеки, которые я могу использовать, такие как модуль FuzzyWuzzy в Python.
Однако, с точки зрения обработки, кажется, что потребуется слишком много ресурсов, чтобы каждая строка в 1 списке сравнивалась с другой, что в этом случае, по-видимому, требует 1 миллион, умноженный на еще один миллион итераций.
Есть ли другие более эффективные методы для этой проблемы?
ОБНОВИТЬ:
Поэтому я создал функцию группирования и применил простую нормализацию для удаления пробелов, символов и преобразования значений в нижний регистр и т. Д.
for n in list(dftest['YM'].unique()):
n = str(n)
frame = dftest['Name'][dftest['YM'] == n]
print len(frame)
print n
for names in tqdm(frame):
closest = process.extractOne(names,frame)
Используя питонов панда, данные загружаются в более мелкие группы, сгруппированные по годам, а затем с помощью модуля FuzzyWuzzy,process.extractOne
используется, чтобы получить лучший матч.
Результаты все еще несколько разочаровывают. Во время теста приведенный выше код используется для тестового фрейма данных, содержащего только 5 тысяч имен, и занимает почти целый час.
Тестовые данные разделены на.
названиеГод месяц рожденияИ я сравниваю их по ведрам, где их YM находятся в одном ведре.
Может ли проблема быть из-за модуля FuzzyWuzzy, который я использую? Ценю любую помощь.