您能帮我这个忙吗?。我试图获取大十进制(BigDecimal)的日志,但是我在下面收到异常错误消息:
Exception in thread "main" java.lang.NumberFormatException: Infinite or NaN
这就是我所拥有的:
BigDecimal num = new BigDecimal(totalDocuments/hitDocuments);
BigDecimal idf = new BigDecimal(Math.log(num.doubleValue()));
BigDecimal termF = new BigDecimal(terms.get(j).getTermFreq());
BigDecimal tfIdf = new BigDecimal(termF.doubleValue() * idf.doubleValue());
terms.get(j).setTfIdf(tfIdf.doubleValue());
我在第二行得到了例外。我该如何解决?非常感谢您的好意。哦,顺便说一句,我正在尝试计算文本文件的“ tf-idf”。
这是完整的代码
File[] corpus = new File("files//").listFiles();
int totalDocuments = (corpus.length) - 1; //-1 for the suspect document.
int hitDocuments = 1;
for (int i = 0; i < corpus.length; i++) {
ArrayList<String> corpusWords = getWords(corpus[i].getAbsolutePath());
for (int j = 0; j < terms.size(); j++) {
for (int k = 0; k < corpusWords.size(); k++) {
if (terms.get(j).getTerm().equals(corpusWords.get(k))) {
hitDocuments++;
}
}
//Update the tf-idf
BigDecimal num = new BigDecimal(totalDocuments/hitDocuments);
BigDecimal idf = new BigDecimal(Math.log(num.doubleValue()));
BigDecimal termF = new BigDecimal(terms.get(j).getTermFreq());
BigDecimal tfIdf = new BigDecimal(termF.doubleValue() * idf.doubleValue());
terms.get(j).setTfIdf(tfIdf.doubleValue());
}
}
`
最佳答案
如果num
是0
,则Math.log()将返回Infinite
如果参数为正零或负零,则结果为负无穷大。