SQL Server 2008で類似した単語を検索することはできますか?
ユーザーが次のように入力した場合:Ayrton Sena
シングルの場合、2つの'n'
行も返す必要がありますAyrton Senna
'nn'
同じ方法がスペルチェックの単語にも当てはまると思います
SQL Server 2008で類似した単語を検索することはできますか?
ユーザーが次のように入力した場合:Ayrton Sena
シングルの場合、2つの'n'
行も返す必要がありますAyrton Senna
'nn'
同じ方法がスペルチェックの単語にも当てはまると思います
「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
しかし、これは実行に時間がかかりすぎる可能性があります。
編集: ただし、現在、名前の類似したスペルをすべて見つけるために最初のアプローチを使用しています。それはうまくいきます。