LoginSignup
2
1

More than 5 years have passed since last update.

RMeCabで一時ファイルを作成しない方法

Last updated at Posted at 2017-04-27

例えばネットワークグラフをさくっと作成したいが、そのためにテキストをファイルに保存して、読み込むのが面倒だという場合の対応。

テキストを文字列として保存し


merosu <-"
メロスは激怒した。
必ず、かの邪智暴虐の王を除かなければならぬと決意した。
メロスには政治がわからぬ。
メロスは、村の牧人である。
笛を吹き、羊と遊んで暮して来た。
けれども邪悪に対しては、人一倍に敏感であった。
きょう未明メロスは村を出発し、野を越え山越え、十里はなれた此のシラクスの市にやって来た。
メロスには父も、母も無い。
女房も無い。
十六の、内気な妹と二人暮しだ。
この妹は、村の或る律気な一牧人を、近々、花婿として迎える事になっていた。
結婚式も間近かなのである。
メロスは、それゆえ、花嫁の衣裳やら祝宴の御馳走やらを買いに、はるばる市にやって来たのだ。
先ず、その品々を買い集め、それから都の大路をぶらぶら歩いた。
メロスには竹馬の友があった。
セリヌンティウスである。
今は此のシラクスの市で、石工をしている。
その友を、これから訪ねてみるつもりなのだ。
久しく逢わなかったのだから、訪ねて行くのが楽しみである。
"

これをデータフレームにする

S <- data.frame(merosu, stringsAsFactors = FALSE)

RMeCab にはデータフレームの列を指定して解析できる関数 (RMeCabDF(), docMatrixDF(), docDF() ) があるので、これを使う。


df <- docDF(S, pos = c("名詞","形容詞", "動詞"), 
       column = 1, type = 1, N = 2, nDF = 1)
head(df)

上の例では、バイグラムの各単語(そして頻度)を独立した列として保存したデータフレームが出力される。

ここから、例えばネットワークグラフを描く。

library(igraph)
library(dplyr)
library(magrittr)

df %<>% select(N1, N2, Row1) %>% filter(Row1 > 1)
bigram <- graph_from_data_frame(df)
tkplot(bigram, vertex.color = "SkyBlue", vertex.size = 22)

ただしおすすめは、tempdir() を使って一時ファイルを作成することです。


tmp <- tempfile()
write(merosu, tmp)

df2 <- docDF(tmp, pos = c("名詞","形容詞", "動詞"), column = 1, type = 1, N = 2, nDF = 1)

df2 %<>% select(N1, N2, Row1 = starts_with("file")) %>% filter(Row1 > 1)

bigram2 <- graph_from_data_frame(df2)

tkplot(bigram2, vertex.color = "SkyBlue", vertex.size = 22)

以下、参考までに http://rmecab.jp/wiki/index.php?RMeCabFunctions#t9aa01d7 から引用。

dummy <- c ("私は真面目な学生です。",
             "彼女は数学専攻の学生です。", 
             "彼らは物理学を専攻している。")
tmpdir <- tempdir ()

for (i in seq(dummy) ){
   td <- tempfile("tmp", tmpdir = tmpdir)
   write( dummy [i] ,  file = td)
   if (file.exists (td)) cat( td, "exists", "\n")
}
library (RMeCab)
x <- docMatrix (tmpdir)
x
#  以下のコードは、通常は実行する必要はありません# 
# unlink (tmpdir, recursive = TRUE) # tmpファイルを削除
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1