我有以下程序来计算doctionary(freq)的每个条目的文档频率
foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)))
{
_docFreq[i][termIndex]++;
}
Run Code Online (Sandbox Code Playgroud)
以及获得期限索引的程序
rivate int GetTermIndex(string term)
{
int i;
if (_wordsIndex.TryGetValue(term, out i))
return i;
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中,所有术语都在另一个字典(_wordsIndex)中编入索引.
基于上述过程,如果freq中的entry.Key不存在,那么GetTermIndex将返回0并且将计算_docFreq(_docFreq [i] [0]),这就是问题所在.那么,我怎么能避免在入口时计数.键不存在?我试着做点什么
rivate int GetTermIndex(string term)
{
int i;
if (_wordsIndex.TryGetValue(term, out i))
return i;
else
return -1;
}
Run Code Online (Sandbox Code Playgroud)
但是当然出现了错误"索引超出了数组的范围",因为没有_docFreq [i] [ - 1]的索引.
可以帮忙吗?非常感谢
如果termIndex是-1,就不要算它:
foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)))
{
if (termIndex >= 0)
_docFreq[i][termIndex]++;
}
Run Code Online (Sandbox Code Playgroud)
或使用LINQ Where:
foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)).Where(ti => ti >= 0))
{
_docFreq[i][termIndex]++;
}
Run Code Online (Sandbox Code Playgroud)