У меня есть 2 списка более миллиона имен со слегка отличающимися соглашениями об именах. Цель здесь - сопоставить те записи, которые схожи, с логикой 95% -ной уверенности.
Я понял, что есть библиотеки, на которые я могу использовать, например, модуль FuzzyWuzzy в Python.
Однако с точки зрения обработки кажется, что это займет слишком много ресурсов, каждая строка в 1 списке будет сравниваться с другой, что в этом случае, по-видимому, требует 1 миллион, умноженное на еще миллион количество итераций.
Существуют ли другие более эффективные методы для этой проблемы?
UPDATE:
Итак, я создал функцию bucketing и применил простую нормализацию удаления пробелов, символов и преобразования значений в нижний регистр и т.д.
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)
Используя pythons pandas, данные загружаются в меньшие ковши, сгруппированные по годам, а затем с использованием модуля FuzzyWuzzy, process.extractOne
используется для получения наилучшего соответствия.
Результаты по-прежнему несколько разочаровывают. Во время теста приведенный выше код используется в кадре тестовых данных, содержащем только 5 тысяч имен и занимающий почти целый час.
Данные теста разделяются на.
- Имя
- Год Месяц Дата рождения
И я сравниваю их по ведрам, где их YM находятся в одном ковше.
Может ли проблема быть из-за модуля FuzzyWuzzy, который я использую? Цените любую помощь.