例如:
地图如下:
输出 = 地图(执行 -> 1, () -> 2, 为 -> 1, 在 -> 1, 残酷 -> 1, 每个人 -> 1, 感觉 -> 1, 基督 -> 1, 全部 -> 1, 锯 -> 1, 哭泣 -> 1, 它 -> 1, 两个 -> 1, a -> 2、人-> 1、我-> 3、到-> 1、哭泣-> 1、你-> 1、调谐-> 1、>1、是-> 1、有-> 1、小时-> 1、如何 -> 1、电视转播-> 1、我-> 1、不是-> 1, 可以 -> 1,是 -> 1,激情 -> 1,我们 -> 1,坐 -> 1,当 -> 1,如 -> 1,> 2 和 -> 1,观看 -> 1,程序 -> 1,-> 3) 类型 [任何,Int]
列表(pos)是从包含大量单词的文件创建的。它可以在肯定词部分找到。为了创建该列表,我使用了以下代码:
val words = """([A-Za-z])+""".r
val pos = scala.io.Source.fromFile("Positive_words.txt").getLines.drop(35).flatMap(words.findAllIn).toList
我注意到,当列表与地图匹配时,使用以下任一方法:
val result = output.filterKeys(pos.contains)
或
output.foreach { x => pos.foreach { aa => if(x._1.toString() == aa) <create a new hashmap>}}
导致意想不到的事情。有些单词即使在 pos 中不存在,也会显示在输出中。
输出代码段如下:
val result = output.filterKeys(pos.contains)
result: scala.collection.immutable.Map[Any,Int] = Map(in -> 9, all -> 1, a -> 2, to -> 1, around -> 1, passion -> 1, like -> 1, of -> 2, the -> 3) 这是打印一些不相关的项目,这些项目甚至不是列表 = pos 的一部分。
像 in,all to 这样的词是意料之外的。
PS:如果在不使用上述代码的情况下创建一个简单的列表(pos),则输出就可以了。
您可以使用map 的filterKeys
仅保留pos
列表中存在的键,使用pos.contains
作为谓词:
val result = output.filterKeys(pos.contains)
result.foreach(println)
我不知道这是否对您有所帮助。但通常只有原语(布尔值、整数、每个以小写开头的类型)应该与"=="进行比较。所有其他对象都应与 .equals() 进行比较,而 String 就是这样的对象。 也许你只是记住这一点。
在创建列表时使用flatMap造成了问题。
它已通过使用以下代码而不是我之前编写的代码来解决:
val pos = scala.io.Source.fromFile("Positive_words.txt").getLines.drop(35).toList
谢谢。