我有一个Map[String, Int]
文件(字,计数)。我希望通过将第二个参数除以(标准化)每个单词的总数来得到Map[String, Double]
。
我怎样才能有效:
我想不出一种“简单”的做法。
编辑1:我总结计数的方式如下:
var total_count = 0
for((x,y) <- s) yield {total_count += y}
编辑2:地图如下所示:
[o’s c -> 1], [the c -> 1], [who’s -> 1], [ is a -> 2]
这些是n-gram,而不是真正的“单词”可以这么说
答案 0 :(得分:3)
您可以通过执行Double
来获得val total = map.values.sum.toDouble
的总和。
然后,您可以map.mapValues(_ / total)
获得Map[String, Double]
。
请注意,mapValues
将为您提供map
的视图。也就是说,它存储对原始map
和lambda(_ / total
)的引用,并在您要求时按需计算值。
如果您想一次计算所有Double
值,则可以改为map.map({ case (k, v) => k -> (v / total) })
。
最后,请注意,如果您的Map[String, Int]
中没有对,或者所有值都为零,那么您将除以零。