在SQL中查找类似值的高效技术?

时间:2009-07-10 04:36:37

标签: sql pattern-matching

所以我在表中有一个包含字符串值的列(从第三方工具填充的关键字)。我正在研究一种自动化工具,以识别可能被标准化为单个值的类似值的集群。例如,“消防员”/“消防员”,“同位素”/“同位素”或“犬”/“犬类”。

计算levenshtein距离的方法似乎是理想的,除非它涉及太多的字符串操作/比较,并且可能会很难使用SQL索引。

我已经考虑过按列的左(X)字符进行递增分组,这是一种最大化索引使用的不太好的方法,但这种方法实际上只能在最后找到差异很大的单词这个词。

有人在SQL中有效地解决了这个问题吗?

注意:我意识到这个问题与(Finding how similar two strings are)非常相似,但这里的区别是需要在SQL中有效地执行此操作。

3 个答案:

答案 0 :(得分:2)

您没有提到您使用的数据库,但如果是T-SQL,您可以使用SOUNDEX值和difference

答案 1 :(得分:1)

如果您使用的是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

答案 2 :(得分:0)

John,如果您使用的是MS SQL Server,则可以利用Full-Text Indexing服务。使用some powerful functions全文搜索功能可以实现此目的。