我有HashMap
名为List<String, Intger> wordFreqMap
,其size
为234
wordFreqMap = {radiology=1, shift=2, mummy=1, empirical=1, awful=1, geoff=1, .......}
我想计算每个单词的term frequency
。
term frequency = frequency of term / total number of terms
public static Map<String, Double> getTFMap (Map<String, Integer> wordFreqMap)
{
Map<String, Double> tfMap = new HashMap<String, Double>();
int noOfTerms = wordFreqMap.size();
Double tf;
for (Entry<String, Integer> word : wordFreqMap.entrySet() )
{
tf = (double) ( word.getValue() / noOfTerms );
tfMap.put(word.getKey(), tf );
}
return tfMap;
}
我的问题是,tfMap
正在返回{radiology=0.0, shift=0.0, mummy=0.0, empirical=0.0, awful=0.0, geoff=0.0, .....}
我不明白为什么每个学期都会返回0.0
。我该如何解决?
我应该得到类似{radiology=0.00427, shift=0.00854, ...}
答案 0 :(得分:9)
您正在执行整数除法,然后键入强制转换:
tf = (double) ( word.getValue() / noOfTerms );
^-----integer division----^
键入部门中的一个元素以转换为浮点除法:
tf = ((double)word.getValue()) / noOfTerms;
答案 1 :(得分:2)
您正在进行整数除法,然后将该答案转换为double。你需要做的是先将两个值之一转换为double,然后对它进行除法。那应该能得到你想要的答案。
答案 2 :(得分:1)
Integer/Integer
是一个Integer
,已投放到Double
,因此它仍然是Integer
扩展为Double
。
将其更改为
tf = ( (double)word.getValue() / noOfTerms );
答案 3 :(得分:1)
你正在做的是将整数除以另一个整数,然后尝试将其转换为double。 int / int是一个int,虽然你把它强制转换为double,你不会得到带小数点的实际值。
int/int -> int
你应该做的是将word.getValue()或noOfterms转换为double 然后
int/double -> double
double/int -> double
double/double -> double
e.g。
tf = (double)word.getValue()/noOfTerms;
或
tf = word.getValue()/(double)noOfTerms;