Супер нечеткая проверка имени?
Я работаю над некоторыми материалами для внутреннего 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
Что касается поиска полного/псевдонима, то я ничего не знаю о нем. Прозвища варьируются в зависимости от региона и много информации для отслеживания. Может быть база данных, связывающая полные имена с псевдонимами, которые вы могли бы использовать в своем собственном приложении.