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

Я работаю над некоторым материалом для внутренней CRM. Текущий frontend компании допускает много дубликатов. Я пытаюсь мешать конечным пользователям включить того же человека, потому что они искали 'Bill Johnson' и не 'William Johnson'. Таким образом, пользователь вставит некоторую информацию об их новом клиенте, и мы будем находить аналогичные имена (включая нечеткие имена) и соответствовать им против того, что уже находится в нашей базе данных, и спросите, имели ли в виду они те вещи... Такая база данных или технология существуют?

15
задан BenV 20 July 2010 в 13:24
поделиться

6 ответов

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

Затем я сортирую полученный результат по расстоянию Левенштейна. 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

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

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

2) Во время поиска выполняется нечеткий поиск $ word в базе данных: $ Soundlike = 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 или что-то в этом роде.

6
ответ дан 1 December 2019 в 04:40
поделиться

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

Обновление: Я портировал модуль perl, о котором упоминал там, на C # и разместил его на github. http://github.com/stimms/Nicknames

4
ответ дан 1 December 2019 в 04:40
поделиться

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

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

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

2
ответ дан 1 December 2019 в 04:40
поделиться

Вы можете использовать SOUNDEX, чтобы получить похожие по звучанию имена. Однако он не будет сочетаться, например, с William и Bill.

В качестве примера попробуйте использовать SQL.

SELECT SOUNDEX('John'), SOUNDEX('Jon')
0
ответ дан 1 December 2019 в 04:40
поделиться

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

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

1
ответ дан 1 December 2019 в 04:40
поделиться

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

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

0
ответ дан 1 December 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: