2

SQL Server 2008で類似した単語を検索することはできますか?

ユーザーが次のように入力した場合:Ayrton Sena

シングルの場合、2つの'n'行も返す必要がありますAyrton Senna'nn'

同じ方法がスペルチェックの単語にも当てはまると思います

4

4 に答える 4

2

「Senna」は「Sena」の反映ではないため、全文索引付けを使用してこのタスクを解決することは困難です。

2 つの文字列が「等しい」と見なされるかどうかを判断するには、全文と文字列の類似性を組み合わせて使用​​することをお勧めします。

したがって、複数の単語を検索し、そのうちの 1 つのスペルミスを許可する場合は、次のようなものを使用します

select * 
  from myTable t 
       join FullTextTable(myTable,TextField,'Ayrton Senna') f 
         on f.ID=t.PK
where dbo.MyExternalStringSimilarity('Ayrton Senna', t.TextField)>0.9

必要なのは、文字列類似度関数だけです。Microsoft データ品質サービスにある「類似度」関数を使用するか、独自の関数を作成できます。

Jaro-Winkler、Levenshtein、Dice-Coefficient などを探してください。これらは、文字列の類似性比較を行うのに適したアルゴリズムです。

もちろん、次を使用してデータベース全体をスキャンすることもできます

select *
 from myTable t
 where dbo.MyExternalStringSimilarity('Ayrton Senna', t.TextField)>0.9

しかし、これは実行に時間がかかりすぎる可能性があります。

編集: ただし、現在、名前の類似したスペルをすべて見つけるために最初のアプローチを使用しています。それはうまくいきます。

于 2013-01-26T14:13:03.947 に答える
0

全文検索を見てください。これにより、さまざまな単語形式を含むあらゆる種類の検索が可能になります。単語形式を構成することも、すぐに使用できる辞書を使用することもできます。

引用(私の強調)

フルテキストクエリは、英語や日本語などの特定の言語のルールに基づいて単語やフレーズを操作することにより、フルテキストインデックスのテキストデータに対して言語検索を実行します。フルテキストクエリには、単純な単語やフレーズ、または複数の形式の単語やフレーズを含めることができます。

シソーラスについては、この回答を参照してください。

全文検索の代わりにLuceneがあります。

于 2013-01-26T13:41:43.387 に答える