«Hugo Boss» включает в себя «Hugo Bos», «Huggo Boss», «Hugo Boss Ltd» .... Все вышесказанное будет иметь одинаковые значения soundex (фонетического алгоритма), за исключением последнего, LTD».
Вы можете сопоставить soundex с названиями компаний.Это должно работать над «Hugo Boss» «Hugo Bos» и «Huggo Boss». Однако «Hugo Boss Ltd» не будет соответствовать другой из-за LTD в конце. Этот метод хорошо работал для нечеткого соответствия, где я работаю, и результаты были полезны при сравнении между именами и фамилиями для установления личности.
Имейте в виду, что soundex не будет работать для таких вещей, как номера социального страхования. Он имеет более строгую область по сравнению с расстоянием, таким как расстояние редактирования.
Возможно, вы также можете удалить такие вещи, как «Ltd», «LLC», «Corp», которые являются общими для названий предприятий в вашем наборе данных. Это поможет создать структуру соответствия soundex, поскольку сокращает длину строк.
Кроме того, вы можете сравнить буквы ngrams, как рекомендовал thomas в своем ответе на запись, и это упростило бы количество ngrams для тестирования.
Вот алгоритм NYSIIS:
алгоритм, как описано в штата Нью-Йорк идентификации и разведки системы:
1. Translate first characters of name: MAC → MCC, KN → N, K → C, PH, PF → FF, SCH → SSS
2. Translate last characters of name: EE → Y, IE → Y, DT, RT, RD, NT, ND → D
3. First character of key = first character of name.
4. Translate remaining characters by following rules, incrementing by one character each time:
1. EV → AF else A, E, I, O, U → A
2. Q → G, Z → S, M → N
3. KN → N else K → C
4. SCH → SSS, PH → FF
5. H → If previous or next is non-vowel, previous.
6. W → If previous is vowel, A.
7. Add current to key if current is not same as the last key character.
5. If last character is S, remove it.
6. If last characters are AY, replace with Y.
7. If last character is A, remove it.
8. Append translated key to value from step 3 (removed first character)
9. If longer than 6 characters, truncate to first 6 characters. (only needed for true NYSIIS, some versions use the full key)
SOUNDEX пакеты во многих языках программирования высокого уровня. В питона вы можете попробовать нечеткие пакет:
#!/usr/bin/env python
import fuzzy
names = [ 'Catherine', 'Katherine', 'Katarina',
'Johnathan', 'Jonathan', 'John',
'Teresa', 'Theresa',
'Smith', 'Smyth',
'Jessica',
'Joshua',
]
for n in names:
print '%-10s' % n, fuzzy.nysiis(n)
Выход:
$ python show_nysiis.py
Catherine CATARAN
Katherine CATARAN
Katarina CATARAN
Johnathan JANATAN
Jonathan JANATAN
John JAN
Teresa TARAS
Theresa TARAS
Smith SNATH
Smyth SNATH
Jessica JASAC
Joshua JAS
В приведенном выше примере можно найти здесь: http://www.informit.com/articles/article.aspx?p=1848528
Вы можете ввести и матч ngrams или полные имена.
Наконец, вы можете использовать имя режима в данных или какой-либо другой метод для нормализации поля имени.
Посмотрите на Lucene, который может выполнять нечеткое соответствие по текстовым элементам - https://lucene.apache.org/ –
У вас есть список канонических/правильных написаний? Вы можете использовать расстояние Левенштейна до ошибочных совпадений с нечетким совпадением. https://en.wikipedia.org/wiki/Levenshtein_distance –
Сегодня миллион записей не слишком много. Вы можете легко использовать карту для нее. – user1952500