1

(私はAndroid SDKで開発していますが、それは重要ではないかもしれません)ファイルからいくつかのフレーズを読み取り、それらをコレクションに保存します。

例: 「ハローワールド」、「こんにちは」、「ビッグワールド」

グーグルホームページのようなものを作りたいです。ユーザーが1つ以上の単語を書くことができる編集テキストがあります。彼が最初の単語 (例: "hello") を入力したときに、いくつかのテキスト フィールドに候補句 (例: "hello world"、"mark say hello") を表示したいと考えています。これで、ユーザーは別の単語を入力して検索を絞り込むことができます。

これを行うものはすでにありますか?このデータを古いものにするのに最適なデータ構造はどれですか? Word と idPhrase を使用した MultiMap について考えていました (例: ("hello",0), ("world",0), ("you",1), ...) サブセットを取得することを考えていました(たとえば、ユーザーが「こんにちは」と入力した場合、3 番目のフレーズを削除します) など、検索を絞り込みます。(しかし、フレーズをコレクションではなく、ファイルから sqlLite DB に保存する方がよいかもしれませんが、わかりません...)

これを行うためのより良い方法はありますか?

4

2 に答える 2

0

逆インデックスは、これに適したデータ構造です。ネット上のどこかに実装があるかどうかはわかりませんが (確かに存在します)、自分で簡単に構築できます。ここを見てください:

http://en.wikipedia.org/wiki/Inverted_index

アルゴリズムは次のようになります。

for(String phrase : phrases)  
{     
    for(String word : phrase.split(" "))  
    {  
        List temp= map.get(word); 
        if (temp == null) {
            temp= new ArrayList<String>();
            map.put(word, temp);
        }
        temp.add(phrase);
    }  
}  

後で、ユーザー クエリ (単語) のマップをクエリし、フレーズのリストを出力するだけです。

フレーズ検索が必要な場合は、http: //en.wikipedia.org/wiki/Tf –idf を参照してください。それ以外の場合は、フレーズ クエリの各単語に対して返されたリストの和集合を見つけます。

于 2013-05-13T15:00:34.760 に答える
0

次に、TextWatcher を探しています。

myEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                // TODO Auto-generated method stub
                //Here implemens the logic stuff that at each new character entered

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {

                // TODO Auto-generated method stub
            }
        });

listView を使用した小さな例を次に示します。

別のアプローチとして、カスタムの提案を使用することもできます。

于 2013-05-13T15:01:05.250 に答える