2017-04-15 5 views
0

私は巨大なテキストファイルを持っています。私はそのテキストファイルから「私が感じる」というフレーズの後に出現する単語の数を求めます。ここでテキストファイルのパターンを数える

は、ファイルがどのようなものであるかの小さな例です。

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) 

これは、リスト内のすべての単語が存在の数を返しません。さらに、Map[String,Int]をテキストファイルに書き込むにはどうすればよいですか?ここで

+1

可能な複製を参照してくださいhttp://stackoverflow.com/questions/15487413/scala-beginners-simplest-way-to-( count-words-in-file) – starlight

+0

あなたが参照している解決策は、すべての出現を返しません。元のコメント – AzkaGilani

答えて

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")) 

は「私が感じる」文の後の単語の一致をグループ化していますテキストファイルに書き込ま:

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() 

[Scalaの初心者 - ファイル内の単語をカウントする最も簡単な方法]のScala documentation on regular expressions

+0

のコードを更新しました。更新された質問を親切にチェックしてください。あなたはその点を欠いている。私はその特定の配列に存在する文字列を大きなテキストファイルで見つける必要があります。 – AzkaGilani

+0

ありがとうございます:) – AzkaGilani

関連する問題