雑草わんだほー

That's so wonderful♪

ScalaでN-gramを一行で

重い腰を上げてScala触ってます。ということでN-gramなる簡単なテキスト処理を書いてみましたの巻。

  • おもむろにScalaのREPLを立ち上げて、お気に入りのページから元データを読み込みます。エッセイ巧いなぁ……。

店にねこ入ってきて疲れたしようじょも入ってきた - 24時間残念営業

val source = scala.io.Source.fromURL("http://lkhjkljkljdkljl.hatenablog.com/entry/2013/07/01/190816", "UTF-8")
  • 行ごとに読んでList[String]にします。BufferedSourceをcloseしなきゃなので、ここまではノーカン。。。
val lines = try source.getLines.toList finally source.close
  • 適当に日本語用の前処理してN-gramします。お、折り返して見えるかもだけど、改行してないから一行ったら一行!
lines.map(_.filter(_.toString.getBytes.length > 1)).flatMap(_.split(Array('、', '。', ' '))).flatMap(_.sliding(5).toList).groupBy(identity).mapValues(_.size).toSeq.sortWith(_._2 < _._2).filter(_._2 > 4).foreach(println)

(ようじょも,5)
(なりました,5)
(入ってきて,5)
(ねこ入って,6)
(女子小学生,6)
(こ入ってき,6)
(入ってきた,10)

    ∧,,∧   。・。゚・。 ゚・。゚・ N-gramできたよ〜
   ( ´・ω・)つ\_______/