SQL Server - поиск совпадений в именах - PullRequest
2 голосов
/ 20 февраля 2012

Я использую SQL Server 2005, у меня есть имена, поступающие в систему, и я хочу сравнить их с таблицей для поиска совпадений.Любые предложения о том, как сопоставить что-то вроде этого:

Входящее значение является чем-то вроде «JR Thompson Corporation», а значение «The Jim Ryan Thompson Company» в базе данных.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Проще говоря - это невозможно сделать. Даже нормализация адресов является сложной, и там вы следуете только определенным правилам (например, Str. Для Street). Я был в проекте, который делал это в Германии 15 лет назад, и ад, так сказать, развалился - потому что в некоторых местах были особые правила (m 4 = действительный адрес в одном городе, например, потому что внутренний город - это квандранты, или «Штрассе» des 14. Июль Appartement 3 "нарушил наши" первый номер в конце названия улицы "правила).

Все это становится странным - в вашем примере "J.R." и «Джим Райан» может или не может быть одинаковым. Есть некоторые правила, которые вы можете установить, и с адресами это становится намного проще (тот же адрес означает, что в конце сопоставление имен может стать более свободным), но в целом это нереализуемый подход. Даже исправление орфографии не поймает этого. Там просто нет способа нормализовать это без искусственного интеллекта, имеющего доступ в Интернет, чтобы использовать Google, чтобы выяснить, соответствует ли он. Да, вы можете рассчитывать на 20% или 30% вероятности попадания, но это оставляет ТОНА ошибок влево и вправо и, скорее всего, бесполезна с деловой точки зрения.

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

0 голосов
/ 20 февраля 2012

Не выполняя полнотекстовый поиск (который предназначен для этих целей), вы можете сделать это простым способом и приблизиться, просто заменив пробелы и точки символами подстановки% и поместив% в начале и концеstring:

DECLARE @input VARCHAR(50) = 'J.R. Thompson Corporation'

SELECT * 
FROM Company 
WHERE Name LIKE '%' + REPLACE(REPLACE(@input, '.', '%'), ' ', '%') + '%'

Важно отметить, что при выполнении любого поиска LIKE, в котором у вас есть начальный символ %, индекс по этому столбцу не будет иметь преимуществ.

Обратите внимание на этопо-прежнему не будет подбирать такие вещи, как «компания», что означает «корпорация», как в вашем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...