所以我在表中有一个包含字符串值的列(从第三方工具填充的关键字)。我正在研究一种自动化工具,以识别可能被标准化为单个值的类似值的集群。例如,“消防员”/“消防员”,“同位素”/“同位素”或“犬”/“犬类”。
计算levenshtein距离的方法似乎是理想的,除非它涉及太多的字符串操作/比较,并且可能会很难使用SQL索引。
我已经考虑过按列的左(X)字符进行递增分组,这是一种最大化索引使用的不太好的方法,但这种方法实际上只能在最后找到差异很大的单词这个词。
有人在SQL中有效地解决了这个问题吗?
注意:我意识到这个问题与(Finding how similar two strings are)非常相似,但这里的区别是需要在SQL中有效地执行此操作。
答案 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全文搜索功能可以实现此目的。