Scala:规范化第二个参数或Map [String,Int]

时间:2015-09-25 15:09:38

标签: scala dictionary

我有一个Map[String, Int]文件(字,计数)。我希望通过将第二个参数除以(标准化)每个单词的总数来得到Map[String, Double]

我怎样才能有效:

  1. 汇总地图中每个单词的数量
  2. 将每个计数除以(1.)中的total_count?
  3. 我想不出一种“简单”的做法。

    编辑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,而不是真正的“单词”可以这么说

1 个答案:

答案 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]中没有对,或者所有值都为零,那么您将除以零。