0

私のちょっとした個人的なプロジェクトは、外部ソースを使用せずに検索エンジンをゼロからやみくもに作成することです。これは主に学習体験のためであり、ジレンマと困難な問題の両方を抱えている今まで、あまり問題はありませんでした。

このケースを観察してください:

Suzy は "fuzzy bears" を検索したいと考えています。これは問題ありません。可能な限り機能します。しかし、スージーは台無しにして「fuzzybears」と入力します。現在、これは複数のトークンではなく単一のトークンとして解釈されるため、私の検索アルゴリズムは機能しません。このようなランオンタームまたはくっついたトークンが 1 つでも出現する単語のケースまたは組み合わせは、検索結果の質を低下させます。

スコープのために、これは C# と T-SQL の組み合わせを使用して書いているものです。

私は複数の解決策を試しましたが、実際には何も得られませんでした。まず、リストを使用して用語を取得し、バリエーションを作成しましたが、これは私の好みでは遅すぎ、必要以上に多くのメモリを必要としました。

統計のために検索クエリをデータベースに保存し、おそらくアルゴリズムを有機的に成長させることについてもっと学びたかったので、SQLでこれらの接着されたトークンを処理する方法が解決策になるかもしれませんが、そのようなものから始める方法がわかりませんカーソルまたはその他の遅いソリューションを使用しない限り。

検索してデータベースに保存し、いくつかのトークンが接着されたさまざまな組み合わせを作成し、それらの接着されたトークンを用語としてヒットさせることができますか? このソリューションの問題点は、かなりのスペースを占めることと、このようなスペル ミスはあまり一般的ではないため、常にこれらの文字列が必要になるとは限らないことです。

主に、私が必要としているのはスピードです。きれいである必要はありませんが、高速で正確であれば、多くのディスク容量を占有しても満足です。

ここで解決策を求めているわけではありませんが、誰かが私が行くことができる方向に私を向けることができれば、それは大歓迎です.

4

1 に答える 1

1

このアプローチを検討してください: スペース、句読点、および同様のものはこのような検索を台無しにするため、それらをすべて削除し、一般的なケース (私は小文字が好きですが、好きなものを選んでください) に変換してから、音節に基づいてトークン化します。英単語のハイフネーションとほぼ同じ一連の分割規則です。

したがって、「Consider this approach:」を含む回答を検索するには、フレーズを「considerthis approach」に減らしてから、「con」、「sid」、「er」、「this」、「ap」、「proach」としてトークン化します。 . con と sid と er が隣り合ってこの順序で表示される場合、「consider」という単語が見つかりました。

このアプローチは、統計的一致にも適用できます。たとえば、音節の少なくとも 85% が正しい順序で見つかった場合、それを近似一致と見なし、結果を一致 % で並べ替えて、より意味のある一致が一番上になるようにすることができます。

于 2016-03-22T15:40:48.237 に答える