11

Googleがいくつかの検索クエリで行うように、「もしかして:」をどのように実装できますか?

PS:私は自分の製品にスフィンクスを使用しています。これをどのように実装できるか提案できますか。この機能を備えた他の検索エンジンのガイドや提案は大歓迎です。私はrails2.3.8を使用しています。

1つの解決策は次のとおりです。

既知の「キーワード」または「フレーズ」の辞書を作成し、検索アクションで何も見つからない場合は、その辞書で2次クエリを実行します。ブログ投稿やユーザー名など、検索可能なエントリが作成されるたびに、その辞書を更新します。

  • query = "supreman"

  • 辞書=["スーパーマン"、 "バットマン"、 "ハヌマーン"...](DBテーブル内)

  • 検索クエリー)

  • 結果がない場合は、

辞書で検索(「キーワード」LIKEクエリまたは「フレーズ」LIKEクエリ)=>「スーパーマン」

sphinxまたはsolrのドキュメントをチェックインします。彼らは、%一致を返すこの「いいね」クエリのより良い実装を持っているかもしれません。

  • 表示->「スーパーマン」のことですか?

しかし、ポイントはそれを効率的にする方法ですか?

4

5 に答える 5

5

ダメラウ・レーベンシュタイン距離アルゴリズムをご覧ください。2つの文字列間の「距離」を計算し、1つの文字列を別の文字列に変換するために必要なステップ数を決定します。ステップが少ないほど、2つのストリングが近くなります。

この記事では、MySQLストアド関数として実装されたアルゴリズムを示します。

アルゴリズムは、LIKEやSOUNDEXよりもはるかに優れています。

Googleはアルゴリズムではなくクラウドソーシングデータを使用していると思います。つまり、ユーザーがabcdと入力し、戻るボタンをクリックしてすぐにabdを検索すると、ユーザーは結果に満足できなかったため、2つの検索用語の間に関係が確立されます。非常に大規模なコミュニティ検索を行うと、パターンが表示されます。

于 2012-10-18T05:14:12.263 に答える
2

Google が次のようなものを実装する方法の実際の理論を確認する必要があります: How to Write a Spelling Corrector .

この記事は Python で書かれていますが、記事の最後に他の言語での実装へのリンクがあります。これがRuby の実装です。

于 2012-10-19T19:12:55.663 に答える
1

文字列一致アルゴリズムを探していると思います。

初期化のつづりを少し間違えたときにエラーを発生させるために使用されたmislavの要点を覚えています。それは良い読み物かもしれません。

また、彼が提案する記事のいくつかを見てください:

于 2012-10-12T11:45:52.653 に答える
1

音声スペル修正機能に基づいて機能が実装されているということでしたか。つづりを間違えると、一般的に発音的に似た単語を書きます。この考えに基づいて、発音スペル修正プログラムはデータベースで最も類似した単語を検索します。類似性の関係は、コンテキスト (複数単語のクエリの場合、他の単語も正しい単語を決定するのに役立ちます) と単語の人気度を使用して解消されます。2 つの単語がスペルミスのある単語に音声学的に非常に近い場合、文脈に適合し、日常生活でより頻繁に使用される単語が選択されます。

于 2012-12-09T14:03:21.680 に答える