Имам 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)
Чрез използването на pythons pandas, данните се зареждат в по-малки кофи, групирани по години и след това с помощта на модула FuzzyWuzzy, process.extractOne
се използва за получаване на най-доброто съвпадение.
Резултатите все още са донякъде разочароващи. По време на теста кодът по-горе се използва върху тестов кадър с данни, съдържащ само 5 хиляди имена и отнема почти цял час.
Данните от теста са разделени на.
- Име
- Година Месец Дата на раждане
И аз ги сравнявам по кофи, където техните YM са в една и съща кофа.
Възможно ли е проблемът да се дължи на модула FuzzyWuzzy, който използвам? Оценявам всяка помощ.
LTD
илиINC
и може би дори небукви. - person Alec   schedule 16.08.2016unique
ing и двата списъка, за да се надяваме да намалите и двата с няколко порядъка, така че квадратичните (размити) сравнения да не бъдат толкова болезнени. - person acdr   schedule 16.08.2016O(mn)
време на изпълнение, можете да изчислите разстоянието на Левенщайн между двата низа и да видите дали те са в рамките на вашия праг на приемане - person Nick Zuber   schedule 16.08.2016