2009-07-10 3 views
0

文字列の値(サードパーティツールからのキーワード)を含む表の列があります。私は、おそらく単一の値に正規化できる類似の値のクラスタを識別するための自動化されたツールに取り組んでいます。たとえば、 "Firemen"/"Fireman"、 "Isotope"/"Asotope"、 "Canine"/"Canines"などです。SQLで類似の値を見つけるための実践的なテクニックはありますか?

levenshtein距離を計算する方法は、文字列の操作/比較が多すぎることを除いて理想的です。おそらくSQLインデックスの使用率が低くなります。

私は、列の左(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

2

T-SQLの場合は、SOUNDEXの値とdifferenceを使用できます。

+0

現在、私はT-SQLを使用していますが、複数のデータベースプラットフォームで動作する可能性のある、より一般化された回答を得るためには言及しませんでした。 しかし、Soundex/Differenceのアプローチは有望です。私はそれをスピンします。 – JohnFx

0

ジョン、あなたが使用している場合は、MS SQL Serverの、 あなたはできるFull-Text Indexingサービスを利用してください。全文検索機能には、これを実現するために使用するsome powerful functionsがあります。

関連する問題