У меня есть 2 списка более миллиона имен с немного отличающимися соглашениями об именах. Цель здесь - сопоставить те записи, которые схожи, с логикой 95% -ной уверенности.Нечеткое совпадение строк в Python
Я понял, что есть библиотеки, на которые я могу использовать такие функции, как модуль 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)
с помощью Питоны панд, данные загружается в меньшие ковши, сгруппированные по годам, а затем с использованием модуля FuzzyWuzzy, process.extractOne
используется для получения наилучшего соответствия.
Результаты по-прежнему несколько разочаровывают. Во время теста приведенный выше код используется в кадре тестовых данных, содержащем только 5 тысяч имен, и занимает почти целый час.
Данные испытаний разделены.
- Имя
- Год Месяц Дата рождения
И я сравниваю их ведрами, где их YMS находятся в том же ведре.
Может быть проблема из-за модуля FuzzyWuzzy, который я использую? Цените любую помощь.
Вы можете попытаться нормализовать имена и сравнить нормализованные формы. Это становится вполне параллелизуемым. – Alec
Как бы вы порекомендовали продолжить нормализацию? Есть ли стандартный метод, который я могу применить? Цените свои отзывы. – BernardL
Ну, это зависит от разнообразия имен? В качестве простого примера, сопоставляя названия компаний, я мог бы отбросить фразы типа 'LTD' или' INC' и, возможно, даже не-буквы. – Alec