例えばネットワークグラフをさくっと作成したいが、そのためにテキストをファイルに保存して、読み込むのが面倒だという場合の対応。
テキストを文字列として保存し
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ファイルを削除