双师表现错误
我有一个名为List wordFreqMap
的HashMap
List 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 getTFMap (Map wordFreqMap) { Map tfMap = new HashMap(); int noOfTerms = wordFreqMap.size(); Double tf; for (Entry 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, ...}
您正在执行整数除法,然后键入强制转换:
tf = (double) ( word.getValue() / noOfTerms ); ^-----integer division----^
键入转换为除法中的一个元素以转换为浮点除法:
tf = ((double)word.getValue()) / noOfTerms;
您正在进行整数除法,然后将该答案转换为double。 你需要做的是先将两个值之一转换为double,然后对它进行除法。 那应该能得到你想要的答案。
Integer/Integer
是一个Integer
,它被转换为Double
因此,它仍然是一个扩展为Double
的Integer
。
将其更改为
tf = ( (double)word.getValue() / noOfTerms );
你正在做的是将整数除以另一个整数,然后尝试将其转换为double。 int / int是一个int,虽然你把它转换为double,你不会得到带小数点的实际值。
int/int -> int
你应该做的是将word.getValue()或noOfterms转换为double
int/double -> double double/int -> double double/double -> double
例如
tf = (double)word.getValue()/noOfTerms;
要么
tf = word.getValue()/(double)noOfTerms;