形態素解析
形態素解析器であるMeCabに文章を与えると、デフォルトでは以下のような出力が得られます。
system("echo 日曜日はロシアに出かけます。 | mecab")
日曜日 名詞,副詞可能,*,*,*,*,日曜日,ニチヨウビ,ニチヨービ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
ロシア 名詞,固有名詞,地域,国,*,*,ロシア,ロシア,ロシア
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
出かけ 動詞,自立,*,*,一段,連用形,出かける,デカケ,デカケ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。 記号,句点,*,*,*,*,。,。,。
EOS
すなわち形態素ごとに 表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音 が出力されます。
RMeCab パッケージでは RMeCabText()
を除いて、このうち表層形、品詞,品詞細分類1,原形について取り出し、頻度表を作成しています。
ただ、全て品詞情報が必要だという声を耳にすることがありますので、その方法を示します。といってもRMeCataText()
の出力をtidyverse パッケージを使って加工するだけです。
tidyverse と組み合わせる
いわゆるtidyな出力です。
library(RMeCab)
x <- RMeCabText("yukiguni.txt")
library(tidyverse)
x %>% map_df(~ data_frame(Term = .x,
POS = c("表層","品詞","品詞1",
"品詞2","品詞3", "活用1",
"活用2","原形","読み","発音")),.id = "Line") %>% head(11)
## # A tibble: 11 x 3
## Line Term POS
## <chr> <chr> <chr>
## 1 1 国境 表層
## 2 1 名詞 品詞
## 3 1 一般 品詞1
## 4 1 * 品詞2
## 5 1 * 品詞3
## 6 1 * 活用1
## 7 1 * 活用2
## 8 1 国境 原形
## 9 1 コッキョウ 読み
## 10 1 コッキョー 発音
## 11 2 の 表層
POS情報を列に分けたい、つまり横長のデータフレームにしたい場合は以下のようにします。
x <- RMeCabText("/home/ishida/Dropbox/R/forCheck_utf8/data/yukiguni.txt")
x %>% map_df ( ~ data_frame(Term = .x,
Pos = c("表層","品詞","品詞1","品詞2","品詞3",
"活用1","活用2","原形","読み","発音")),
.id = "Line") %>%
spread(key = Pos, value = Term)
## # A tibble: 28 x 11
## Line 活用1 活用2 原形 読み 発音 表層
## * <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1 * * 国境 コッキョウ コッキョー 国境
## 2 10 五段・ラ行アル 連用タ接続 ある アッ アッ あっ
## 3 11 特殊・タ 基本形 た タ タ た
## 4 12 * * 。 。 。 。
## 5 13 * * 夜 ヨル ヨル 夜
## 6 14 * * の ノ ノ の
## 7 15 * * 底 ソコ ソコ 底
## 8 16 * * が ガ ガ が
## 9 17 形容詞・アウオ段 連用テ接続 白い シロク シロク 白く
## 10 18 五段・ラ行 連用タ接続 なる ナッ ナッ なっ
## # ... with 18 more rows, and 4 more variables: 品詞 <chr>, 品詞1 <chr>,
## # 品詞2 <chr>, 品詞3 <chr>
ファイルを用意したくない場合は、一時ファイルを作成して読み込ませるといいでしょう。
tmp <- tempfile()
"国境の長いトンネルを抜けると雪国であった。夜の底が白くなった。信号所に汽車が止まった。" %>%
write(file = tmp)
x <- RMeCabText(tmp)
unlink(tmp)