我正在尝试计算文档集合的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:数字
知道如何解决这个问题吗?
答案 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()));