3

ユーザーがフィールドに入力しているときに提案として提供したい約1000の文があるとしましょう。

私は実行lucene in memory searchしてから、結果を にフィードすることを考えていましたsuggestions set

trigger検索を実行するための はとspace charですexit from the input field

これを使用するつもりGWTなので、クライアントはサーバーから結果を取得するだけです。

私はグーグルがしていることをしたくありません。各単語を完成させ、各キーワード セットについて提案を行います。キーワードをチェックして、それに基づいて提案をしたいだけです。ここでスタックオーバーフローで質問のタイトルを入力しているときのようなものです。

誰かが前にこのようなことをしましたか? 私が使用できるライブラリはすでにありますか?

4

2 に答える 2

2

私は同様の解決策に取り組んでいました。「 Effective Phrase Prediction」というタイトルのこの論文は、私にとって非常に役に立ちました。提案にも優先順位を付ける必要があります

于 2011-10-15T16:05:50.537 に答える
1

文が 1000 個しかない場合は、lucene のような強力なインデクサーはおそらく必要ありません。「文を完成させる」という提案をしたいのか、それとも「同じキーワードを持つ他のクエリを提案する」という提案をしたいのか、私にはわかりません。両方の解決策は次のとおりです。

ユーザーが入力した文を完成させたいと仮定すると、すべての文字列を に入れSortedSet、メソッドを使用しtailSetて入力文字列よりも「大きい」文字列のリストを取得できます (文字列コンパレータはstringAで始まるより長い文字列は、Bよりも「大きい」と見なされますB)。次に、によって返されたセットの上位のいくつかのエントリを反復処理して、最初の文字が入力文字列と一致する文字tailSet列のセットを作成します。最初の文字が入力文字列と一致しなくinputString.length()なったらすぐに反復を停止できます。inputString.length()

「文を完成させる」提案の代わりにキーワードの提案を行いたい場合、オーバーヘッドは、文の長さと、文に含まれる一意の単語の数によって異なります。このセットが十分に小さい場合は、HashMap<String,Set<String>>キーワードをそれらを含む文にマッピングした . 次に、セットを交差させることにより、複数単語のクエリを処理できます。

どちらの場合も、おそらく最初にすべての文字列を小文字に変換します (それがアプリケーションで適切であると仮定します)。どちらのソリューションも、何十万もの提案に拡張できるとは思いません。それらのどちらかがあなたが望むことをしますか?必要に応じてコードを提供します。

于 2011-06-10T05:13:14.550 に答える