0

所以我在表中有一个包含字符串值的列(从第 3 方工具填充的关键字)。我正在开发一种自动化工具来识别可能被标准化为单个值的相似值的集群。例如,“Firemen”/“Fireman”、“Isotope”/“Asotope”或“Canine”/“Canines”。

一种计算 levenshtein 距离的方法似乎是理想的,除了它涉及太多的字符串操作/比较并且可能对 SQL 索引的使用不佳。

我考虑过按列的 Left(X) 字符进行增量分组,这是最大化索引使用的一种不错的方法,但这种方法实际上只在查找单词末尾有差异的单词时才有效.

任何人都有一些好的想法可以在 SQL 中有效地解决这个问题?

注意:我意识到这个问题与(查找两个字符串有多相似)非常相似,但这里的区别是需要在 SQL 中有效地执行此操作。

4

3 回答 3

2

你没有提到你使用的是什么数据库,但如果它是 T-SQL,你可以使用SOUNDEX value 和difference

于 2009-07-10T04:39:44.870 回答
1

如果您使用的是 SQL Server,您可能会考虑使用 SOUNDEX() 函数,如下所示:

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

它应该对字符串进行语音匹配...

一些奇怪的例子......所以看起来你可以通过总是将复数文本附加到双方来捕捉复数,因为多个 's 的声音相同...... :-)

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
于 2009-07-10T04:43:21.337 回答
0

John,如果您使用的是 MS SQL Server,您可以利用全文索引服务。全文搜索功能具有一些强大的功能,您可以使用它们来实现这一点。

于 2009-07-10T04:58:07.123 回答