LoginSignup
2
4

More than 1 year has passed since last update.

RMeCabで形態素解析してみた

Last updated at Posted at 2021-02-05

1. はじめに

形態素解析とは、テキストを形態素の単位(=意味の最小単位)に分割することを指します。

データ解析専用のオープンソース・フリーソフトウェアのR言語においては、
ライブラリー RMeCabを使用することによって、形態素解析を行うことができます。

今回は、RMeCab を使用して、簡単な形態素解析を実行してみます。
※ Mac PCで実行します。

2. 準備

2-1. RStudio インストール

R言語を使用するために、RStudioをインストールします。
インストールイメージは、以下のリンク先からダウンロードできます。

R Studio
https://www.rstudio.com/products/rstudio/download/

2-2. MeCab 準備

オープンソースの形態素解析エンジン MeCabと MeCab 用の辞書 をインストールします。

① MeCabインストール

MacではHomebrewを使用することでインストールすることができます。

※ Homebrewがない場合は、以下リンク先を参考にインストールします。
https://brew.sh/index_ja.html

以下をターミナルで実行し、MeCabをインストールします。

brew install mecab

② 辞書インストール

辞書についてもHomebrewを使用してインストールします。

以下をターミナルで実行し、辞書をインストールします。

brew install mecab-ipadic

2-3. RMeCabインストール

MeCabをRで使うため、ライブラリーRMeCabをインストールします。

以下を RStudioのコンソール上で実行し、
ライブラリーRMeCabをインストールします。

install.packages("RMeCab", repos = "https://rmecab.jp/R", type = "source") 

2-4. 動作確認

インストールしたRMeCabが正常に使用できるか、簡単な実行をして確認します。

① ライブラリー読み込み

RMeCabで用意されている関数を実行する前に、
ライブラリーRMeCabを読み込みます。

以下を RStudio コンソール上で実行します。

library(RMeCab)

② RMeCabC関数 実行

RMeCabC関数 を使用して、指定した文字列を形態素解析してみます。
引数に日本語文字列を設定すると、MeCabで解析した結果が返されます。

RMeCabC関数に 日本語文字列 "すもももももももものうち" を引数として設定し、実行します。

> res <- RMeCabC("すもももももももものうち")
> res
[[1]]
    名詞 
"すもも" 

[[2]]
助詞 
"も" 

[[3]]
  名詞 
"もも" 

[[4]]
助詞 
"も" 

[[5]]
  名詞 
"もも" 

[[6]]
助詞 
"の" 

[[7]]
  名詞 
"うち" 

見やすさのため、unlist関数を使用して、結果resはリストからベクトルに変換します。

> unlist(res)
    名詞     助詞     名詞     助詞     名詞     助詞     名詞 
"すもも"     "も"   "もも"     "も"   "もも"     "の"   "うち" 

引数に設定した文字列が分割されて、単語とその品詞が確認できます。

3. 形態素解析 実行

3-1. やりたいこと

前項では短文での形態素解析を実行しましたが、
ここではさらに長いテキストデータを読み込んで、単語の頻出数を確認してみます。

3-2. 実行

① テキストデータ 準備

今回は、以下リンク先の青空文庫のサイトから 作品をダウンロードして、
形態素解析を実施します。

青空文庫
https://www.aozora.gr.jp/

読み込みには Aozora関数 を使用します。

事前に 以下をRStudioコンソールで実行し、Aozora関数 を読み込んでおきます。

source("http://rmecab.jp/R/Aozora.R")

Aozora関数の引数に、
青空文庫サイト内の 読み込みたいテキストファイルのリンクを指定します。

ここでは、以下リンク先のファイルを読み込みます。

・夏目漱石 『吾輩は猫である』
https://www.aozora.gr.jp/cards/000148/files/789_ruby_5639.zip

実行例は以下の通りです。
読み込んだファイルは text に入力します。

> text <- Aozora("https://www.aozora.gr.jp/cards/000148/files/789_ruby_5639.zip")
example: folder_name <- Aozora('http://www.aozora.gr.jp/cards/000081/files/462_ruby_716.zip')


 URL 'https://www.aozora.gr.jp/cards/000148/files/789_ruby_5639.zip' を試しています 
Content type 'application/zip' length 344964 bytes (336 KB)
==================================================
downloaded 336 KB


② RMeCabFreq関数 実行

RMeCabFreq関数 を使用して、読み込んだテキスト内での各単語の出現頻度を確認します。

RMeCabFreq関数は、引数にファイルを設定すると、
ファイル内のテキストを形態素解析し、活用形は原形に変換した上で、
各単語の頻度がデータフレームで返されます。

※ まだの場合は、事前に RMeCabを読み込んでおきます。

> library(RMeCab)

RMeCabFreq関数に、前工程で テキストを読み込んだ text を引数に指定します。
実行結果はresに入力します。

> res <- RMeCabFreq(text)
file = ./NORUBY/wagahaiwa_nekodearu2.txt 
length = 12835

結果を入力した resの中身を確認すると、以下のようになります。

> res
                                            Term    Info1                    Info2 Freq
1                                             よ   その他                     間投    1
2                                             あ フィラー                        *   66
3                                           あの フィラー                        *   30
4                                           あー フィラー                        *    2
5                                         うんと フィラー                        *    5
~~~(省略)~~~

RMeCabFreq関数の実行結果として、以下項目が確認できます。

列名 説明
Term 形態素
Info1 品詞
Info2 品詞細分類
Freq 頻度

③ グラフ描画

各形態素の頻出数を棒グラフにまとめます。

ここでは、品詞(Info1)が名詞かつ品詞細分類(Info2)が一般であり、頻度(Freq)が100より大きい単語に絞ります。

まず、以下のようにして 単語を絞り込んで、res2に入力します。

> res2 <- res[res[,2]=="名詞" & glove[,3]=="一般" & glove$Freq>100,]
> res2
      Term Info1 Info2 Freq
5374  主人  名詞  一般  932
5436    人  名詞  一般  355
5470  人間  名詞  一般  272
5584    例  名詞  一般  108
5691  先生  名詞  一般  274
6341    声  名詞  一般  143
6511    女  名詞  一般  118
7708  東風  名詞  一般  118
7952    気  名詞  一般  157
8343    猫  名詞  一般  249
8439    男  名詞  一般  147
8607    眼  名詞  一般  142
8874  細君  名詞  一般  213
9109  自分  名詞  一般  175
9728  迷亭  名詞  一般  329
9946    間  名詞  一般  103
10113   頭  名詞  一般  166
10130   顔  名詞  一般  272
10304   鼻  名詞  一般  199

barplot関数を使用して、棒グラフを描画します。

引数には、先ほど絞り込んだデータを入力した res2Freq列 を指定し、
各単語の頻出数を棒グラフに表示させます。

また、barplot関数のオプションとして 以下を設定しています。

オプション 説明 設定値
main グラフタイトル "単語頻出数"
names.arg 各要素名 res2$Term
xlab x軸 ラベル "単語"
ylab y軸 ラベル "頻出数"
ylim y軸 表示範囲 c(0, 1000)

以下のように barplot関数を実行します。

> barplot(res2$Freq, main = "単語頻出数", names.arg=res2$Term, xlab = "単語", ylab = "頻出数", ylim=c(0, 1000))

実行結果として、以下のような棒グラフが表示されます。

Rplot.png

4. おわりに

今回は RMeCabを使用して、簡単な形態素解析を実行してみました。

RMeCabには、RMeCabC関数RMeCabFreq関数の他にも様々な関数が用意されています。
RMeCabの詳細な使用方法は、マニュアルにて確認することができます。

RMeCab の使い方
http://rmecab.jp/wiki/index.php?plugin=attach&pcmd=open&file=manual.pdf&refer=RMeCab

参考情報

RMeCab の使い方
http://rmecab.jp/wiki/index.php?plugin=attach&pcmd=open&file=manual.pdf&refer=RMeCab

アールメカブ
http://rmecab.jp/wiki/index.php?FrontPage

RMeCabを用いた日本語テキストマイニング
https://www.oreilly.co.jp/pub/9784873118307/appa.html

RMeCab
https://sites.google.com/view/rmecab/

R-Tips
http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html

データ科学便覧
https://data-science.gr.jp/

青空文庫
https://www.aozora.gr.jp/

2
4
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
4