u++の備忘録

rでテキストファイルの文を1行ずつ分かち書き

 今回は、前回の記事で作成したデータセットについて、分かち書きを実行します。分かち書きすることで、例えばword2vec*1など更なる分析に活用できます。

 前回に引き続き利用するRパッケージRMeCab*2には、RMeCabTextという関数が用意されています。

RMeCabTextは、引数に日本語テキストファイル(文字符号化はRの設定値に一致していなければならない)を二重引用符「"」で挟んで指定して、MeCabに渡し、その結果をリスト形式でそのまま返す関数。 各リストの要素は、10要素からなるベクトルである。*3

 しかし今回、全3047行のテキストファイルに対して実行すると、処理落ちしてしまいました。

res <- RMeCabText("C:/nikkei.txt")

f:id:upura:20170802175343p:plain

 テキストファイルから100行程度を抜粋して実行すると問題なく処理できたので、細かく処理して最後に結果を結合しても良かったのですが、せっかくなので1行ずつ分かち書きしていくスクリプトを書きました。

library(RMeCab)

f = file("C:/nikkei.txt","r")
out <- file("C:/output.txt", "w")

while (1){
  a = readLines(con=f, 1)
  if (length(a) <= 0){
    break
  }
  res = RMeCabC(a)
  writeLines(paste(res), out, sep=",")
  writeLines(paste(""), out, sep="\n")
}
close(out)

 入力ファイルと出力ファイルの中身は以下の通りです。

入力ファイルの中身

f:id:upura:20170802174754p:plain

出力ファイルの中身

f:id:upura:20170802174530p:plain

*1:Mikolov, Tomas; et al. "Efficient Estimation of Word Representations in Vector Space". arXiv:1301.3781 Freely accessible.

*2:石田基広 (2017) 『Rによるテキストマイニング入門第2版』森北出版(東京) 183頁

*3:RパッケージRMeCabで用意されている関数