0

私は Java でソース HashMap を持っています:

HashMap<String, Integer> keyWordFrequencies;

さまざまな長さのキーワードを格納します。この HashMap をトラバースして、各キーワードのテキストを定義するマップの String 部分に格納されている ngram の長さを計算します。

このデータを使用して、HashMap のターゲット ArrayList を設定します。

ArrayList<HashMap<String, Integer>> keywordNgrams;

その結果、ArrayList のインデックスは、特定のキーワードの ngram サイズから 1 を引いた値に対応します。つまり、keywordNGrams(0) はユニグラムを受け取り、keywordNGrams(1) はバイグラムを受け取ります。しかし、必要な構文がわかりません。ソース HashMap のトラバースは非常に簡単です。

Set keyWordFrequenciesSet = keyWordFrequencies.entrySet();
Iterator keyWordFrequenciesIterator = keyWordFrequenciesSet.iterator();
while(keyWordFrequenciesIterator.hasNext()) {
   Map.Entry m = (Map.Entry) keyWordFrequenciesIteratorIterator.next();
   int ngramLength = String_Utils.getLengthOfNgram(m.getKey().toString());

   Add element to keywordNgrams?

しかし、要素を HashMap のターゲット ArrayList に追加すると、混乱します。私が試してみました:

keywordNgrams.add(ngramLength, m);

そして、さまざまな選択肢がありますが、役に立ちません。m は、HashMap 自体ではなく、HashMap の要素である必要があります。誰かが私が間違っている場所を提案できますか?

理想的には、ソース HashMap keyWordFrequency を 1 回トラバースし、keywordNgrams ArrayList を可能な限り最大の ngram サイズに初期化して開始します。

4

2 に答える 2

1

サイズ 5 の ArrayList を扱っているため、ArrayList を初期化するときは、各インデックスに HashMap の新しいインスタンスを追加することをお勧めします。このようなもの:

ArrayList<HashMap<String, Integer>> keywordNgrams = new ArrayList<HashMap<String, Integer>> ();

for(int index = 0; index < 5; index++){
  keywordNgrams .put(index, new HashMap<String, Integer>());
}

ArrayList に要素を追加するには、次のことを行う必要があります。

  • 指定された「n」グラムの特定の HashMap にアクセスします。get(int index)これは、ArrayList で使用して行うことができます
  • 次に、返された HashMap の要素を追加し、もう一度set(int index, E element)同じ HashMap をkeywordNgrams ArrayList に追加します。

サンプル コードは次のようになります。

HashMap<String, Integer> returnedMap = keywordNgrams.get(index); //where index is the position in the list;
returnedMap.put(key, value); //where key & value is the information that you would want to add to your HashMap
keywordNgrams.set(index, returnedMap);
于 2012-09-12T19:13:59.240 に答える
0

最大のngramサイズを知っているので、事前入力することをお勧めしますkeywordNgrams

List<Map<String, Integer>> keywordNgrams =
    new ArrayList<Map<String, Integer>>();
for(int i = 0; i < 5; ++i)
    keywordNgrams.add(new HashMap<String, Integer>());

次に、次のように書くことができます。

for(final String keyword : keyWordFrequencies.keySet())
    keywordNgrams.get(String_Utils.getLengthOfNgram(keyword) - 1)
            .put(keyword, keyWordFrequencies.get(keyword));
于 2012-09-12T19:15:34.877 に答える