MS SQL - ГДЕ совпадения подстрок являются фонетическими? - PullRequest
2 голосов
/ 27 апреля 2011

Я бы хотел создать функцию поиска, которая будет искать на основе совпадения "звуки как".

Например, допустим, у меня есть список компаний, который выглядит следующим образом (скажем, мы живем в мире Bizzaroтоже):

  • Acme
  • Уже намеки на цитирование LTD
  • Весь готовый сайт с иллюзией INC
  • Отдельное согласие
  • Подтверждение зрения

(Или что-то схожее с именами ... George или Jeorge? "Я-путь" или "Йе-хова"?)

Когда кто-то ищетчто-то, что «звучит как» soundex("site") == S230, они должны видеть результаты и для «Sight».

Поскольку большинство людей, которые уже использовали soudnex, уже знают, обычные совпадения подстрок, очевидно, этого не делают.

В своей голове я пытаюсь понять, как создать предложение WHERE, которое может соответствовать этому, поэтому вместо типичного WHERE company LIKE input я бы хотел запустить soundex.Очевидно, что если я запускаю soundex для всего названия компании, я не смогу выполнять поиск по подстроке (например, пользователь, выполняющий поиск «ALL», никогда не будет соответствовать soundex «All ready»).Разделение Soundex на каждое слово также может быть бесполезным, поэтому я не уверен, что запускать все комбинации Soundex - хорошая идея ... или даже если это будет вычислительно выполнимо в базе данных с более чем 1000 записями.

По сути, я хочу иметь дело с тем, когда (в офисе или что-то в этом роде) Том говорит Салли: «Это имя было чем-то вроде Rebekkah Schwartzkopff », и его можно найти в фонетическом порядке на предмет нечеткого соответствия.

Очевидно, что мы столкнемся с проблемами с неанглоязычными компаниями из-за soudnex, но я собираюсь пойти на компромисс с этим.

Я бы хотел сделать это бездобавление чего-либо в базу данных или хранимой процедуры.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Если SOUNDEX является хорошим началом того, что вы делаете, вы можете использовать DIFFERENCE .

например:

SELECT *
FROM Person
WHERE DIFFERENCE(Person.FirstName, 'George') >= 3

Обратите внимание, что функция DIFFERENCE возвращаетразница между значениями SOUNDEX двух строк с использованием значения 0-4;4 означает, что строки довольно близки к одному и 0 означает, что они совершенно разные (для меня это как бы обратная шкала, но я полагаю, что это работает).

1 голос
/ 27 апреля 2011

Очень интересный вопрос. Я немного покопался и нашел это:

http://www.codeproject.com/KB/database/dmetaphone4.aspx

Я сам не проверял, но, похоже, стоит проверить.

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

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