1

私は、ドクショナリー(freq)の各エントリのドキュメント頻度をカウントする次の手順を持っています

  foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)))
         {                                                              
            _docFreq[i][termIndex]++;
         }

また、用語インデックスを取得するための手順

rivate int GetTermIndex(string term)
    {
        int i;
        if (_wordsIndex.TryGetValue(term, out i))
            return i;
        else
            return 0;
    }

ここで、すべての用語は別の辞書(_wordsIndex)で索引付けされます。

上記の手順に基づいて、freqのentry.Keyが存在しない場合、GetTermIndexは0を返し、それが_docFreq(_docFreq [i] [0])をカウントアップします。これが問題です。だから、どうすればentry.Keyが存在しないときにカウントを避けることができますか?私は次のようなことをしようとしました

rivate int GetTermIndex(string term)
    {
        int i;
        if (_wordsIndex.TryGetValue(term, out i))
            return i;
        else
            return -1;
    }

ただし、もちろん、_docFreq [i] [-1]のインデックスがないため、「インデックスは配列の境界外にありました」というエラーが表示されました。

何か助けてもらえますか?どうもありがとう

4

4 に答える 4

5

termIndex-1の場合は数えないでください。

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)))
{
    if (termIndex >= 0)
        _docFreq[i][termIndex]++;
}

またはLINQを使用するWhere

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)).Where(ti => ti >= 0))
{
    _docFreq[i][termIndex]++;
}
于 2012-12-04T09:56:07.250 に答える
1

関数が返す値を確認してください。

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key))) {
  if (termIndex != -1) {
    _docFreq[i][termIndex]++;
  }
}

また:

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)).Where(i => i != -1)) {
  _docFreq[i][termIndex]++;
}
于 2012-12-04T09:56:45.130 に答える
1

どうですか

  foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)).Where(index=>index>=0))
     {                                                              
        _docFreq[i][termIndex]++;
     }
于 2012-12-04T09:56:58.583 に答える
1

これらの無効な値は必ずスキップしてください。

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key))).Where(x => x >= 0)
     {                                                              
        _docFreq[i][termIndex]++;
     }
于 2012-12-04T09:57:26.070 に答える