线程“main”中的异常java.lang.NumberFormatException:无限或NaN

时间:2013-01-17 01:51:14

标签: java cosine-similarity

你能帮我解决这个问题吗?我正在尝试获取一个大小数(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());
        }
    }

`

2 个答案:

答案 0 :(得分:2)

如果num0,则Math.log()将返回Infinite

  

如果参数为正或负,则结果为负无穷大

答案 1 :(得分:2)

看起来hitDocuments或totalDocuments(或两者)都是Double,而hitDocuments是0.0。任何/ 0.0 = Double.Infinity(如果totalDocuments为0.0,则为NaN)。无法记录任何一个。