Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

テキストマイニングはじめました〜その2〜

f:id:teruaki-sugiura:20160501221139p:plain

今回から、さっそくRMeCab(R和布蕪)を使いながらテキストマイニングを学習していきます。MeCabというのは形態素解析をするためのツールです。名前の由来は、開発者の工藤さんがMeCab(和布蕪)が好物らしく、それに由来したと聞いております。また、RMeCabの開発者は徳島大学の石田先生です。さておき、このページの目標は以下の通りです。

ページ目標:
MeCabの基本的な出力結果の理解とRMeCabパッケージの概要の理解

まずは、以下のテキストを形態素解析ツールMeCab分かち書きしてみます。

f:id:teruaki-sugiura:20160501221153p:plain f:id:teruaki-sugiura:20160501142054p:plain

これが結果の出力になります。左から「表層系」「品詞」「品詞細分類1」「品詞細分類2」「品詞細分類3」「活用形」「活用型」「形態素原型」「読み」「発音」の順番に情報が記述されています。また、「表層系=トークン(token) or 延べ語」、「形態素原型=タイプ(type) or 異なり語」と呼ぶ場合もあります。トークンとタイプを区別しないでターム(term)と呼ぶ場合もあります。

この例では「これ」「は」「ペン」「です」「か」「?」と分かち書きされているので、記号を除けばトークンは「5個」ということになります。今回の例ではタイプも「5個」ですが、文章が長くなると「は」などの助詞が使われる頻度が多くなるのでトークン>タイプという関係になります。以下はMeCabでの分かち書きの一例です。

f:id:teruaki-sugiura:20160501221211p:plain

f:id:teruaki-sugiura:20160501142059p:plain

このように、RMeCabでは日本語のテキストの解析をMeCabにお願いし、RMeCabでその情報を引き取り、分析していくことになります。RMeCabとMeCabのインストール方法は以下のリンクを参照ください。

http://rmecab.jp/wiki/index.php?RMeCab

f:id:teruaki-sugiura:20160501221226p:plain

以下がRMeCab()で利用出来る関数群です。

関数名 内容
RMeCabC() 文字列の形態素解析
RMeCabText() ファイルの形態素解析
RMeCabDF() データフレームの指定列の解析
RMeCabFreq() ファイルから頻度表を作成
docMatrix() ターム行列の作成
docMatrix2() docMatrix()の拡張
docMatrixDF() データフレームからターム行列を作成
Ngram() Ngramのデータフレーム作成
NgramDF() Ngramを列に分けたデータフレーム作成
NgramDF2() NgramDF()の拡張
docNgram() Ngramを表すターム行列を作成
docNgram2() docNgram()の拡張
collocate() ファイルから共起語の頻度表を作成
collScores() 共起語のスコア計算

上の表にはテキストマイニング用語、例えばターム行列、Ngram、共起語など聞きなれない言葉が含まれているので、下記に解説をまとめておきます。

f:id:teruaki-sugiura:20160501221234p:plain

複数のドキュメント(D_i)をまとめ、行列にしたもののこと。ドキュメント内に表れるターム(T_j)の頻度と各ドキュメントを成分(D_ij)とします。タームは形態素で表現されます。

f:id:teruaki-sugiura:20160501190639p:plain

f:id:teruaki-sugiura:20160501221241p:plain

N-gramとは、テキストの言語単位(文字単位、形態素単位、品詞単位など)の組み合わせのこと。N=2の時はバイグラム、N=3の時はトライグラム。例えば、形態素単位で以下のテキストのバイグラムを作ってみます。

f:id:teruaki-sugiura:20160501221252p:plain

[横浜-の] [の-きれいな] [きれいな-港]

こんな感じで言語単位ごとの文字の組み合わせができあがります。

f:id:teruaki-sugiura:20160501221303p:plain

言語学の分野において、特定の語に隣接している語のことを共起語といい、このような関係を共起(collocation)していると言うそうです。 また、この特定の語のことを「中心語=ノード(node)」、ノードの前後の語数範囲をスパン(span)と呼びます。ノードを「港」にし、スパンを「2」とした時に、以下のテキストを例に共起語を考えます。

f:id:teruaki-sugiura:20160501221317p:plain

ノードの前2語「横浜」「の」 ノードの後2語「で」「見た」

これを調べると何が嬉しいのでしょうか?このような共起関係を調べ、ノードの近傍で特定の語句が頻出するのであれば、ノードと特定語の関係が強いと考えることができます。

以上で今回はおしまい。

次回はRMeCabの基本的な関数を使ってテキストマイニングを学習していきます。テキスト例がなんか横浜びいきなのは、決して横浜が好きというわけではなく、イマジン・ヨコハマフォントを使用しているためです。笑