Я хочу отфильтровать дублирующиеся имена клиента от базы данных. У единственного клиента может быть больше чем одна запись в систему с тем же именем, но с небольшим различием в написании. Таким образом, вот пример: у клиента по имени Brook может быть три записи в систему с этим изменения:
Давайте предположим, что мы ставим это имя в одном столбце базы данных. Я хотел бы знать, что различные механизмы определяют, что такая форма дублирований говорит 100,000 записи. Мы можем использовать регулярные выражения в C# для итерации через все записи или некоторый другой метод сопоставления с образцом, или мы можем экспортировать эти записи на то, что когда-либо лучше всего соответствует таким запросам (SQL с возможностями Регулярного выражения)).
Это - то, что я думал как решение
Поэтому передайте любые идеи.
Алгоритм Double Metaphone, опубликованный в 2000 году, является новой и улучшенной версией алгоритма Soundex, запатентованного в 1918 году.
В статье есть ссылки на реализации Double Metaphone на многих языках.
Очевидные, установленные (и хорошо задокументированные) алгоритмы поиска сходства строк:
Изучите саундекс. Это довольно стандартная библиотека для большинства языков, которая делает то, что вам нужно, то есть алгоритмически определяет фонетическое сходство. http://en.wikipedia.org/wiki/Soundex
Я бы подумал о написании чего-нибудь вроде "знаменитого" средства проверки орфографии на Python.
http://norvig.com/spell-correct.html
Это будет использовать слово и найти все возможные альтернативы, основанные на пропущенных буквах, добавлении букв, замене букв и т. Д.
Вы можете найти в Google алгоритм фонетического сходства
, и вы найдете много информации об этом. Включая эту статью на Codeproject о реализации решения на C #.
Существует очень хороший пакет R (просто найдите "R" в Google) для Record Linkage. Стандартные примеры направлены именно на вашу проблему: R RecordLinkage
Си-код для Soundex и т.д. взят прямо из PostgreSQL!
Я бы порекомендовал Soundex и производные алгоритмы по расстоянию Lev для этого решения. Расстояние Левенштейна больше подходит для проверки орфографии imho.
Have a look at Soundex
Существует функция Soundex в Transact-SQL (см. http://msdn.microsoft.com/en-us/library/ms187384.aspx):
SELECT
SOUNDEX('brook berta'),
SOUNDEX('Bruck Berta'),
SOUNDEX('Biruk Berta')
возвращает одно и то же значение B620 для каждого из значений примера