3

キーがidで、値がtextのHashMapがあります。

HashMap<String,String> textMap = new HashMap<String,String>();
textMap.put("id_1","She");
textMap.put("id_2","has");
textMap.put("id_3","a"); 
textMap.put("id_4","neck");
textMap.put("id_5","pain");
//.. more elements in textMap

「首の痛み」のようなフレーズで関連するIDを見つけたいので、この場合、結果はid_4とid_5になります。

誰かがフレーズをIDと一致させるための効率的なアルゴリズムを提案できますか?

重要な条件を含めるのを忘れてすみません。「start_5_end_14」のように、フレーズと単語のオフセットの両方があります。これは、「She」の開始が0である場合、5が「neck」の開始であることを意味します。ただし、ケースを複雑にするのは、オフセットが正しくありません。

4

3 に答える 3

5

単語をIDにマップする逆マップを維持します。次に、フレーズをトラバースして、フレーズ内のreversedTextMap.get(word)それぞれを呼び出しますword

于 2012-10-23T23:01:09.780 に答える
3

GuavaライブラリのBiMapを使用できます

BiMap<String,String> textMap  = HashBiMap.create();

    textMap.put("id_1","She");
    textMap.put("id_2","has");
    textMap.put("id_3","a"); 
    textMap.put("id_4","neck");
    textMap.put("id_5","pain");
    BiMap<String,String> idToText = textMap.inverse();

    System.out.println(idToText.get("neck")); 
    System.out.println(idToText.get("pain"));

値が重複している場合は、MultiMapを使用できます

于 2012-10-23T23:05:26.363 に答える
1

複数のキーに同じ値を設定できるため、マルチマップを使用し値とキーの関係を表すことができます。使用します:

Collection<V>   get(K key) 

値から始まるIDのリストを取得します。

于 2012-10-23T23:08:19.233 に答える