2009-07-10 30 views
0

所以我有一個表中包含字符串值(從第三方工具填充關鍵字)的列。我正在開發一個自動化工具來識別可能被標準化爲單個值的類似值的集羣。例如,「消防員」/「消防員」,「同位素」/「同位素」或「犬」/「犬」。用於在SQL中查找相似值的高性能技術?

計算的Levenshtein距離似乎除了它涉及太多的字符串操作/比較並有可能使用了劣質的SQL指標的事實,理想的一種方法。

我已經考慮過使用列的Left(X)字符進行遞增分組,這是一種不太糟糕的方式來最大化索引使用,但是這種方法實際上只能有效地發現具有差異的單詞這個詞的結尾。

任何人都得到了在SQL有效地解決這個問題的一些好的想法?

注:我知道這個問題是非常相似的(Finding how similar two strings are),但這裏的區別是需要在SQL有效地做到這一點。

回答

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 
+0

有關Soundex如何解決單詞複數版本的任何經驗?聽起來好像對「消防員」/「消防員」會有好處,但對於「犬」/「犬」也許不會那麼好。 – JohnFx 2009-07-10 04:47:57

2

您沒有提及您使用的DB,但如果是T-SQL,則可以使用SOUNDEX值和difference

+0

目前我正在使用T-SQL,但是我沒有提到它,希望得到可能在多個數據庫平臺上工作的更一般化的答案。 雖然Soundex/Difference方法看起來很有希望。我會給它一個旋轉。 – JohnFx 2009-07-10 04:45:56