ユーザ用ツール

サイト用ツール


korean:mecab:r_howto

HanDicをRとRMeCabで利用する

はじめに

ここではHanDicをオープンソースの統計解析システムRおよびRMeCabパッケージで利用する方法について紹介します.

用いた環境はMacOSX(10.8.5),MeCab(0.996),R(3.2.2),RMeCab(RMeCab_0.99991)です.解析用辞書にはHanDic(0.1)を用いました.Windowsでは動作確認をしていません.Windowsの場合,R Consoleでは文字化けが起こりますが,CSVなどにエクスポートすれば内容を確認することができるようです.

なお,グラフ描画の際にハングルが文字化けしないよう,Un Fontsを利用することを前提としています.

注意

このページはHanDicをRMeCabで利用する,という点に主眼を置いて書かれたものです.筆者が統計解析やRに習熟しているわけではありませんので,解析の内容自体に意味がなかったり,誤りがあったりするかもしれないことをお断りしておきます.

また,HanDicによる形態素解析が誤っている可能性もありますので,その点ご承知おきください.

準備

mecabrcに辞書の場所を記述する

MeCabで形態素解析に用いる辞書の場所を指定します.辞書を設定ファイルで指定するで説明したように,ホームディレクトリの.mecabrcに以下の内容を記述します.

dicdir = ~/dicdir/handic

上の例ではホームディレクトリの下にあるdicdir/handicというディレクトリにある辞書を指定しています.MeCab実行時に-dオプションで辞書の場所を指定する,といった方法をとることができませんので,前もって場所を指定しておきます.

RMeCabの実行時に辞書の場所を指定する

.mecabrcに辞書の場所を記述すると,解析の際に常にその辞書が用いられることになります.RMeCabを実行する際に直接辞書の場所を指定する場合は,.mecabrc以外のファイルに上記の内容を書いておき,実行時にmecabrcを指定します.例えばdot.mecabrcというファイルに辞書の場所が記述してある場合は,Rコンソールで以下を実行します.

> library("RMeCab")
> res<-RMeCabFreq("target.txt", mecabrc="~/dot.mecabrc")

Rで必要なパッケージをインストールする

Rコンソールで,RMeCabとqgraphパッケージをインストールしておきます.

# RMeCabのインストール
> install.packages ("RMeCab", repos = "http://rmecab.jp/R")
# ライブラリのロードに失敗する場合は以下でインストール
> install.packages ("RMeCab", repos = "http://rmecab.jp/R", type = "source")
 
# igraphのインストール
> install.packages("igraph")
 
# qgraphのインストール
> install.packages("qgraph")

MacOSのMountain Lion(10.8.5)ではRMeCabのロードがうまくいかず,install - rmecabを参考にしてソースからインストールしました.

また,ここではネットワーク図の作成に際し,図の描画にはqgraphパッケージ(CRAN作者)とigraphパッケージ(配布元)を用いています.

解析するデータを準備する

HanDicを使って解析をするために,あらかじめ解析対象のテキストを字母に分解し,ファイルに保存しておきます.ここでは朴槿恵大統領と李明博前大統領の就任式スピーチをそれぞれjamo_18_ParkGH.txtjamo_17_LeeMB.txtとして保存したものを利用します.データは대통령기록연구실,경향신문の記事から取得し,1行1文に修正しました.

字母に分解する際にはPerlスクリプトk2jamo.plここで公開しています)を使っています.

perl k2jamo.pl 18_ParkGH.txt > jamo_18_ParkGH.txt

上記の手順,あるいは他の方法でも構いませんが,前もって字母に分解したテキストを準備しておきましょう.いくつかのテキストをホームディレクトリ下のjamo_txtというディレクトリに保存しておくと仮定して,以下のセクションに進みます.

RMeCabで解析する

RMeCabの機能については,配布元ホームページの機能説明部分などをご覧ください.以下ではいくつかの例だけ,簡単に取り上げます.

頻度のカウント

RMeCabFreq()関数で李明博前大統領のスピーチを分析してみます.

# パッケージのロード
> library(RMeCab)
 
# テキストの格納
> targetText<-"jamo_17_LeeMB.txt"
 
# 頻度のカウント
> leemb<-RMeCabFreq(targetText)
file = ./jamo_17_LeeMB.txt 
length = 1147 
 
# 結果(一部)
> head(leemb)
      Term     Info1 Info2 Freq
1     걸맞 Adjective  自立    1
2 고통스럽 Adjective  自立    1
3     그래 Adjective  自立    4
4     그렇 Adjective  自立    4
5     넓으 Adjective  自立    1
6   눈물겹 Adjective  自立    1
 
# 頻度の降順でソート
> leemb_sort<-leemb[order(leemb$Freq, decreasing=TRUE),]
> head(leemb_sort)
      Term  Info1    Info2 Freq
922      . Symbol ピリオド  234
134 ㅂ니다 Ending     語尾  139
122     을 Ending     助詞  134
123     의 Ending     助詞  125
897     하 Suffix 動詞派生  104
162 습니다 Ending     語尾   91
 
# 名詞のみ抜き出す
> head(leemb_sort[grep("Noun", leemb_sort$Info1),])
    Term Info1    Info2 Freq
360 국민  Noun     普通   30
196 우리  Noun   代名詞   26
218   수  Noun 依存名詞   23
522 사회  Noun     普通   22
205   것  Noun 依存名詞   21
398 나라  Noun     普通   21
 
# 動詞のみ抜き出す
> head(leemb_sort[grep("Verb", leemb_sort$Info1),])
     Term Info1  Info2 Freq
1146   하  Verb 非自立   77
1142   있  Verb 非自立   14
994    되  Verb   自立   11
1120   하  Verb   自立    9
960  나서  Verb   自立    8
1078 위해  Verb   自立    8

最後に示した動詞の例で分かるように,活用形ごとに集計されています.石田基広・小林雄一郎(2013:64)では「活用語は基本形に変換されます」としているので,日本語の場合には基本形ごとに集計されるものと思われます.素性の順序の違いなどが関わっているのかもしれません..mecabrcでMeCabの出力形式を変更すればうまくいくのでしょうか.現在のところ,解決できていません.

Windows版のRでは文字化けが起こって結果を確認できませんが,CSVなどに書き出せば問題ありませんでした(確認済み).

N-gramの抽出

上記に引き続き,李明博前大統領のスピーチを対象として,N-gramを抽出してみます.

# Ngram()関数で文字単位のbigramを抽出
> ngram<-Ngram(targetText)
file = ./jamo_17_LeeMB.txt Ngram = 2 
length = 787 
# 結果の先頭部分
> head(ngram)
   Ngram Freq
1  [!-7]    1
2 [!-ᄀ]    1
3 [!-ᄁ]    1
4 [!-ᄂ]    1
5 [!-ᄃ]    1
6 [!-ᄉ]    1
# 結果の末尾部分
> tail(ngram)
      Ngram Freq
782 [’-ᄋ]    3
783 [ㆍ-ᄀ]    3
784 [ㆍ-ᄉ]    1
785 [ㆍ-ᄌ]    1
786  [使-)]    1
787  [勞-)]    1
 
# 形態素単位で名詞と助詞・語尾のtrigramを抽出
> ngram<-Ngram(targetText, type=1, N=3, pos=c("Noun", "Ending"))
file = ./jamo_17_LeeMB.txt Ngram = 3 
length = 2738 
# 結果の先頭部分
> head(ngram)
                    Ngram Freq
1           [ODA-를-확대]    1
2           [PKO-에-적극]    1
3          [UN-평화-유지]    1
4       [브코프-러시아-연방]    1
5             [츠-산업-의]    1
6 [프-우즈베키스탄-대통령]    1
# 結果を頻度の降順でソート
> ngram<-ngram[order(ngram[,2], decreasing=TRUE),]
# その結果(一部)
> head(ngram)
                Ngram Freq
93     [ㄹ-것-ㅂ니다]   12
891  [는-국민-여러분]   11
2134   [을-야-ㅂ니다]    9
2496   [존경-는-국민]    9
103        [ㄹ-수-는]    6
1195   [를-야-ㅂ니다]    6

「…を(-를/을)〜しなければなりません(-아야/어야 합니다)」という表現が合わせて15回,高い頻度で使われているようです(2134と1195).

頻度のカウントと同じく,Windows版のRでは文字化けが起こって結果を確認できませんが,CSVなどに書き出せば問題ありませんでした(確認済み).

ネットワーク分析

以下ではigraphとqgraphを利用した例を取り上げます.

解析部分

RMeCabで名詞(Noun)の単語bigramとその頻度を取得します.

# パッケージのロード
> library(RMeCab)
 
# テキストの格納
> targetText<-"jamo_18_ParkGH.txt"
# 名詞のbigramを取得
> res<-NgramDF(targetText, type=1, N=2, pos="Noun")
# 頻度の降順でソート
> res<-res[order(res[,3], decreasing=TRUE),]
# 頻度2以上のbigramを対象にデータを作成
> PlotData<-subset(res, res[,3]>1)

igraph

igraphでグラフを作成しますが,plot()ではハングルが表示できませんでした.そのためtkplot()で描画します.なお,XQuartz参照)およびtcltk2パッケージが必要です.

# パッケージのロード
> library("igraph")
> library("tcltk2")
 
# PlotDataをグラフオブジェクトに格納
> g<-graph.data.frame(PlotData)
 
# tkplot()で描画
> tkplot(g, vertex.label=V(g)$name, layout=layout.fruchterman.reingold, vertex.size=1)

結果は以下の通り.

tkplotを用いて描画した朴槿恵大統領就任スピーチの単語ネットワーク

画面ではうまく表示されますが,PostScriptでエクスポートする際にハングルが文字化けします.また別の設定が必要かもしれません.

qgraph

qgraphではQuartzでハングルを表示させることができました.前もってフォントファミリーを作成し,描画の際にファミリーを指定する必要があります.以下ではUn DotumフォントとUn Graphicフォントを指定していますが,他のフォントでも大丈夫だろうと思います.

# グラフ表示用のフォントファミリー「UnDotum」を作成
quartzFonts( UnDotum = c("UnDotum", "UnDotum-Bold", "UnGraphic", "UnGraphic-Bold"))
 
# パッケージのロード
> library(qgraph)
 
# フォントファミリーを設定
par(family="UnDotum")
 
# 描画
qgraph(PlotData, layout="spring")

結果は以下の通り.

qgraphで描画した朴槿恵大統領就任スピーチの単語ネットワーク

「콘텐츠(コンテンツ)」がうまく分析されず,「콘」と「테」に分離されてしまっています.なお,結果はPDFに保存することができます.フォントは全て埋め込まれます.

ちなみに李明博前大統領の例は以下の通り.

qgraphで描画した李明博大統領就任スピーチの単語ネットワーク

登場する語とそのつながりにかなり違いがあることが分かります.

なお,qgraphパッケージを利用した方法はWindows版Rでも試してみました(quartzFonts()関数ではなくwindowsFonts()関数を用いる)が,やはり文字化けしました.

参考文献・リンク

このページの作成にあたって,以下の書籍やウェブサイトを参考にしました.

記述に誤りなどがありましたら,筆者までお知らせください.

korean/mecab/r_howto.txt · 最終更新: 2015/11/15 22:06 by yoshi