0

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

レーベンシュタイン距離を計算するアプローチは、文字列の操作/比較が多すぎて、SQL インデックスを十分に活用できない可能性があるという事実を除けば、理想的です。

列の Left(X) 文字でインクリメンタルにグループ化することを検討しました。これは、インデックスの使用を最大化するためのそれほど悪くない方法ですが、このアプローチは、単語の最後に違いがある単語を見つける場合にのみ効果的です。 .

SQL でこの問題を効率的に解決するための良いアイデアはありますか?

注: この質問は ( Finding how similar two strings are ) と非常によく似ていますが、ここでの違いは、SQL でこれを効率的に行う必要があることです。

4

3 に答える 3

2

使用しているDBについては言及していませんが、T-SQLの場合はSOUNDEX値とdifferenceを使用できます。

于 2009-07-10T04:39:44.870 に答える
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
于 2009-07-10T04:43:21.337 に答える
0

John さん、MS SQL Server を使用している場合は、フルテキスト インデックスサービスを利用できます。全文検索機能には、これを実現するための強力な機能がいくつかあります。

于 2009-07-10T04:58:07.123 に答える