无限的结果

时间:2014-12-10 10:24:53

标签: java tf-idf

我正在尝试计算文档集合的tf和idf。我的问题是,我得到无限,我不想要无限但我想要双重结果。

这是我的代码:

 String key = entry.getKey().toString();
 Integer value = entry.getValue().intValue();
 System.out.println("key " + key + " value " + value);

 BigDecimal tf=new BigDecimal(entry.getValue()/collection.size());
 BigDecimal idf=new BigDecimal(Math.log(counter/entry.getValue()));
 BigDecimal tfidf =new BigDecimal((tf.doubleValue())*(idf.doubleValue()));
 System.out.println("TF*IDF: " + key + ": " + tfidf.doubleValue());

输入: Map是关键字的映射,Integer是文档中出现的字数。

输出: 关键字+ TF * IDF:数字

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

您可能在以下行中遇到问题:

BigDecimal tf = new BigDecimal(entry.getValue()/collection.size());

你正在进行整数除法。这可能会被截断为零。尝试将其更改为

BigDecimal tf=new BigDecimal((double) entry.getValue()/collection.size());

这里有同样的问题:

new BigDecimal(Math.log(counter/entry.getValue()));

将其更改为

new BigDecimal(Math.log((double) counter/entry.getValue()));