Передовые методы для поиска похожих значений в SQL? - PullRequest
0 голосов
/ 10 июля 2009

Итак, у меня есть столбец в таблице, который содержит строковые значения (ключевые слова, заполняемые из стороннего инструмента). Я работаю над автоматизированным инструментом для определения кластеров схожих значений, которые, вероятно, можно нормализовать для одного значения. Например, «Пожарные» / «Пожарный», «Изотоп» / «Изотоп» или «Собачий» / «Собачий».

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

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

Кто-нибудь получил хорошие идеи для эффективного решения этой проблемы в SQL?

Примечание: я понимаю, что этот вопрос очень похож на ( Нахождение того, насколько похожи две строки ), но различие здесь заключается в необходимости сделать это эффективно в SQL.

Ответы [ 3 ]

2 голосов
/ 10 июля 2009

Вы не упоминаете, какую БД вы используете, но если это T-SQL, вы можете использовать значение SOUNDEX и разницу .

1 голос
/ 10 июля 2009

Если вы используете SQL Server, вы можете использовать функцию SOUNDEX (), как показано ниже:

...
where
   SOUNDEX("searchterm") = SOUNDEX(searchvaluefield)

предполагается, что фонетическое сопоставление строк ...

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

select soundex('Canine'), soundex('Canines')
go

----- ----- 
C550  C552  

1 Row(s) affected


select soundex('Canine'), soundex('Caynyn')
go

----- ----- 
C550  C550  

1 Row(s) affected


select soundex('Canines'), soundex('Caniness')
go

----- ----- 
C552  C552  

1 Row(s) affected
0 голосов
/ 10 июля 2009

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

...