我有一个巨大的文本文件。我希望在该文本文件中出现“我感觉”一词之后出现一些单词。
以下是文件内容的一个小例子:
i feel awesome
i feel nothing but i also feel awesome
i feel good.
我阅读了文字文件并匹配包含“我觉得”的行。现在我的输出形式为:
res3: Array[String] = Array("awesome", "nothing", "good", ....)
我需要在文本文件中找到这些单词的出现次数。
我目前为此目的使用的代码如下:
val c1 = scala.io.Source.fromFile("text.txt", "UTF-8").
getLines.flatMap(regexpr.findAllIn(_).toList).
foldLeft(Map.empty[String, Int]) {
(count, word) => count + (word -> (count.getOrElse(word, 0) + 1))
}
但这让我只计算了该数组中存在的几个单词。 例如,它返回:
c1: scala.collection.immutable.Map[String,Int] = Map(awesome -> 1, nothing -> 4)
它不会返回列表中存在的单词 all 的计数。另外,如何将Map[String,Int]
写入文本文件?
答案 0 :(得分:1)
以下是文本文件中的行列表:
val lines = scala.io.Source.fromFile("text.txt","UTF-8").getLines
这是一个Java打印作者:
val f = new java.io.PrintWriter(new java.io.File("counts.txt"))
这里是对&#34之后的单词的匹配进行分组;我觉得"写入文本文件的语句:
lines.flatMap {
"i feel (\\w+)".r.findAllMatchIn(_).map(_.group(1)) // Return only paren matches
}.toTraversable.groupBy(identity).mapValues(_.size).foreach {
case (word, count) => f.write(s"$count\t$word\n") // Separate by tab
}
然后关闭文件
f.close()