LoginSignup
5
7

More than 5 years have passed since last update.

MeCabの全解析結果をデータフレームにする

Last updated at Posted at 2017-12-14

形態素解析

形態素解析器である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)
5
7
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
5
7