Супер нечеткая проверка имени?

Я работаю над некоторыми материалами для внутреннего CRM. В текущем интерфейсе компании допускается много дубликатов. Я пытаюсь остановить конечных пользователей от сдачи того же человека, потому что они искали "Билл Джонсон", а не "Уильям Джонсон". Таким образом, пользователь предоставит некоторую информацию о своем новом клиенте, и мы найдем похожие имена (включая нечеткие имена) и сопоставим их с тем, что уже есть в нашей базе данных, и спросите, означают ли они эти вещи... Имеет ли такая база данных или технология существует?

Ответы

Ответ 1

Я реализовал такую ​​функциональность на одном веб-сайте. Я использую double_metaphone() + levenstein() в PHP. Я предварительно вычисляю double_metaphone() для каждой записи в dabatase, которую я просматриваю, используя SELECT первых х символов "метафонированного" искомого термина.

Затем я сортирую возвращаемый результат по их левенштинскому расстоянию. double_metaphone() не является частью какой-либо библиотеки PHP (последний раз, когда я проверял), поэтому я позаимствовал реализацию PHP, которую я нашел где-то давно в сети (сайт больше не работает). Я должен разместить его где-нибудь, я полагаю.

РЕДАКТИРОВАТЬ: Веб-сайт по-прежнему находится в archive.org: http://web.archive.org/web/20080728063208/http://swoodbridge.com/DoubleMetaPhone/

или кеш Google: http://webcache.googleusercontent.com/search?q=cache:Tr9taWl9hMIJ:swoodbridge.com/DoubleMetaPhone/+Stephen+Woodbridge+double_metaphon

что приводит ко многим другим полезным ссылкам с исходным кодом для double_metaphone(), включая один в Javascript для github: http://github.com/maritz/js-double-metaphone p >

РЕДАКТИРОВАТЬ: Прошел через мой старый код, и вот примерно то, что я делаю, псевдокодировано, чтобы ясное:

1) Предкоммутировать double_metaphone() для каждого слова в базе данных, то есть $word = 'blahblah'; $Soundslike = double_metaphone ($ слово);

2) При времени поиска слово $word нечетко искажено в базе данных: $soundslike = double_metaphone ($ word)

4) SELECT * FROM table WHERE soundlike LIKE $soundlike (если вы используете levenstein как процедуру, намного лучше: SELECT * FROM table WHERE levenstein (soundlike, $soundlike) < mythreshold ORDER BY levenstein (word, $word) ASC LIMIT... и т.д.

Это сработало хорошо для меня, хотя я не могу использовать хранимую процедуру, поскольку у меня нет контроля над сервером, и он использует MySQL 4.20 или что-то в этом роде.

Ответ 2

Я задал один вопрос. Список наименований наименований имен. Я никогда не делал ничего с этим, но проблема снова возникла на работе, поэтому я могу написать и открыть исходную библиотеку в .net для выполнения некоторые соответствия.

Update: Я портировал модуль perl, который я упомянул там, на С# и поместил его на github. http://github.com/stimms/Nicknames

Ответ 3

Реализовать расстояние Левенштейна:

http://en.wikipedia.org/wiki/Levenshtein_distance

Это может быть написано как функция SQL и запрошено много разных способов.

Ответ 4

Ну SSIS имеет некоторые задачи с нечеткой логикой, которые мы используем, чтобы найти дубликаты после факта.

Я думаю, хотя вам нужно, чтобы ваша логика выглядела не просто как имя для достижения наилучших результатов. Если они вводят адрес, электронную почту или телефонную информацию, возможно, вы можете искать людей с одинаковой фамилией с одним или несколькими из этих других матчей и спросить, будет ли один из них делать. Вы также можете составить таблицу псевдонимов для разных имен и сопоставить их. Вы не получите их всех, но вы можете получить некоторые из наиболее распространенных в вашей стране, по крайней мере.

Ответ 5

Вы можете использовать SOUNDEX для получения похожих имен зондирования. Тем не менее, это не будет соответствовать Уильяму и Биллу, например.

Попробуйте это в SQL в качестве примера.

SELECT SOUNDEX('John'), SOUNDEX('Jon')

Ответ 6

В SQL Server есть встроенные функции SOUNDS LIKE, см. SOUNDEX http://msdn.microsoft.com/en-us/library/aa259235%28SQL.80%29.aspx

Что касается поиска полного/псевдонима, то я ничего не знаю о нем. Прозвища варьируются в зависимости от региона и много информации для отслеживания. Может быть база данных, связывающая полные имена с псевдонимами, которые вы могли бы использовать в своем собственном приложении.