0

そのため、用語を含むドキュメントのリストを作成し、対応するdocument_idと用語の頻度を配列(サイズ2)に入力しようとしています。次に、このエントリ配列をリストに追加して、最終的なリストにすべてのエントリが含まれるようにします。ただし、エントリは参照によってリストに渡されるため、毎回書き換えられるため、これを実行する方法がわかりません。また、データのサイズが原因で、whileループ内で新しいint []エントリを宣言しようとすると、プログラムのメモリが不足します。これをパスする方法についてのアイデアはありますか?私はJavaにさびています。ありがとう。

List<int[]> occurenceIndex = new ArrayList<>();
int[] entry = new int[2];  

while (matchedDocs.next())
{
    entry[0] = (matchedDocs.doc());    // Adds document id 
    entry[1] = (matchedDocs.freq());   // Adds term weight
    occurenceIndex.add(entry);
}
4

3 に答える 3

2

ループ内にint配列の新しいオブジェクトを作成してみてください。

List<int[]> occurenceIndex = new ArrayList<>();
while (matchedDocs.next())
{
   int[] entry = new int[2];
   entry[0] = (matchedDocs.doc());    // Adds document id 
   entry[1] = (matchedDocs.freq());   // Adds term weight
   occurenceIndex.add(entry);
}
于 2013-02-20T23:43:31.267 に答える
2

int[] entry = new int[2];whileループに入れる必要があります

それはintである必要がありますか、byteまたはshortはどうですか?これが不可能な場合は、同じ配列インスタンスを使用してこのような配列を格納する方法がないため、プログラムをリファクタリングする必要があります。– NeilLocketz1分前編集

于 2013-02-20T23:43:31.530 に答える
0

HashMapレコードの保存に使用することを検討してください。

Map<Integer, Integer> occurenceIdx = new HashMap<Integer, Integer>();
while(matchedDocs.next())
    occurenceIdx.put(matchedDocs.doc(), matchedDocs.freq());

マップを作成するために必要なコードはこれですべてです。ドキュメントIDに基づいて値を取得するには

docFreq = occurenceIdx.get(docId);

これは、一意のドキュメントIDがある場合にのみ機能することに注意してください。そうでない場合は、このソリューションを即興で作成する必要があります。HashMap<Integer, List<Integer>>docIDの複数のインスタンスをサポートするようにマップを作成する可能性があります

于 2013-02-20T23:45:25.533 に答える