読者です 読者をやめる 読者になる 読者になる

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

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

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

今回はNgramを中心に学習していきます。そのため、この記事の目標は以下の通りです。

目標
Ngram()関数、NgramDF()関数、NgramDF2()関数、docNgram()関数、
Ngram2()関数を理解する

また、今回使用するフォントは「はんなり明朝」です。特徴は、やさしくて、ふんわりとした字体です。 f:id:teruaki-sugiura:20160505115819p:plain まずはN-gramとは一体なにもののでしょうか。情報理論研究者クロード・エルウッド・シャノンが考えたものらしく、定義は「あるテキストの総体を前から順に任意のN個の文字列または単語の組み合わせで分割したもの」だそうです。つまり、文字単位または形態素単位、品詞単位がN個つなぎ合わせた組み合わせのことです。また、Nに応じて、それぞれ1(uni)gram、2(bi)gram、3(tri)gram…と呼ばれます。例えば、形態素単位で以下のテキストのバイグラムを作ってみます。 f:id:teruaki-sugiura:20160501221252p:plain

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

こんな感じで言語単位ごとの文字の組み合わせができあがります。実際に関数を利用してNgramを作成していきます。 f:id:teruaki-sugiura:20160505120848p:plain Rヘルプによれば、Ngram()関数は「Ngramをデータフレームで返す関数で、Ngramで一つの列を作ってくれる関数」のようです。基本的なUsageは以下のとおりです。

Ngram(filename, type = 0, N = 2, pos = "Default")
filename:Ngramを作るファイルもと。
type:0=文字語単、1=形態素単位、2=品詞単位。
N:NgramのNの数を指定する。
pos:品詞を指定する。デフォルトは名詞と形容詞。

走れメロスを例にNgramを作成します。設定は、形態素単位、バイグラム、名詞と形容詞とします。

t <- Ngram(filename = "merosu.txt", type = 1, N = 2, pos = "Default")
head(t, 30)

f:id:teruaki-sugiura:20160505123055p:plain 形態素単位、バイグラム、名詞と形容詞という設定では、1538行(length = 1538)あることがわかります。 f:id:teruaki-sugiura:20160505120846p:plain Rヘルプによれば、NgramDF()関数は「Ngramをデータフレームで返す関数で、NgramのNに応じて列を作ってくれる関数」のようです。基本的なUsageは以下のとおりです。

Ngram DF(filename, type = 0, N = 2, pos = "Default")
filename:Ngramを作るファイルもと。
type:0=文字語単、1=形態素単位、2=品詞単位。
N:NgramのNの数を指定する。
pos:品詞を指定する。デフォルトは名詞と形容詞。

さきほどと同様に、走れメロスを例にNgramを作成します。設定は、形態素単位、バイグラム、名詞と形容詞とします。

t <- Ngram(filename = "merosu.txt", type = 1, N = 2, pos = "Default")
head(t, 30)

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

Ngram()関数と異なり、返されるデータフレームの構造が異なりますね。NgramDF()関数では、各要素に対して列を区切っています。次はNgramDF2()関数です。

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

NgramDF2()関数は、1つのテキストファイルを対象にするだけではなく、「フォルダ」ごとNgramを作成することができます。Rヘルプによれば、NgramDF2()関数は「フォルダをもとに、Ngramをデータフレームで返す関数で、NgramのNに応じて列を作ってくれる関数」のようです。基本的なUsageは以下のとおりです。

Ngram DF(directory, type = 0, N = 2, pos = "Default")
directory:Ngramを作るフォルダ。
type:0=文字語単、1=形態素単位、2=品詞単位。
N:NgramのNの数を指定する。
pos:品詞を指定する。デフォルトは名詞と形容詞。
kigo:記号を含める場合は1を指定
minFreq:最低出現頻度の設定

対象とするフォルダは”okazakifolder”です、このフォルダの中には、日刊スポーツ、日経新聞サッカーキングレスターシティの優勝に関する記事が保存されています。設定は、形態素単位、バイグラム、名詞と形容詞、最低出現頻度は2とします。

t <- NgramDF2(directory = "okazakifolder", type = 1, N = 2, pos = "Default", minFreq = 2)
head(t, 10)

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

最低出現頻度を2に設定しているので行方向に各Ngramを足していき、2以上であれば、記述されるようになっています。「レ」「スター」や「岡崎」「慎」と分割されているので、このあたりは辞書を修正する必要がありそうです。

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

docNgram()関数は、1つのテキストファイルを対象にするだけではなく、「フォルダ」ごとNgramのターム行列を作成することができます。Rヘルプによれば、docNgram()関数は「フォルダをもとに、Ngramのターム行列をデータフレームで返す関数」のようです。基本的なUsageは以下のとおりです。

docgram(mydir, type = 0, N = 2, pos = "Default")
mydire:Ngramを作るフォルダ。
type:0=文字語単、1=形態素単位、2=品詞単位。
N:NgramのNの数を指定する。
pos:品詞を指定する。デフォルトは名詞と形容詞。

さきほどと同様、対象とするフォルダは”okazakifolder”です。設定は、形態素単位、バイグラム、名詞とします。

t <- docNgram(mydir = "okazakifolder", N = 2, type = 1, pos = c("名詞"))
tail(t, 10)

f:id:teruaki-sugiura:20160505134754p:plain f:id:teruaki-sugiura:20160505120849p:plain docNgram2()関数は、docNgram()関数の拡張版です。1つのテキストファイルを対象にするだけではなく、「フォルダ」ごとNgramのターム行列を作成することができます。Rヘルプによれば、docNgram()関数は「フォルダをもとに、Ngramのターム行列をデータフレームで返す関数」のようです。基本的なUsageは以下のとおりです。

docgram(mydir, type = 0, N = 2, pos = "Default")
mydire:Ngramを作るフォルダ。
type:0=文字語単、1=形態素単位、2=品詞単位。
N:NgramのNの数を指定する。
pos:品詞を指定する。デフォルトは名詞と形容詞。
kigo:記号を含める場合は、1を指定。
weight:重み付けターム行列を作成する。
minFreq:最低出現頻度。

さきほどと同様、対象とするフォルダは”okazakifolder”です。設定は、形態素単位、バイグラム、名詞、記号なし、重み付け方法はTF-IDF法の正規化行列、最低出現頻度は2とします。

t <- docNgram2(directory = "okazakifolder", N = 2, type = 1, pos = c("名詞"), kigo = 0, weight = "tf*idf*norm", minFreq = 2)
t

f:id:teruaki-sugiura:20160505135536p:plain 上記のようなNgramのターム行列を作成することができましたが、Ngramを見てわかる通り、辞書を整備し直さない解析に使えそうにないですね。

以上で今回はおしまい。

広告を非表示にする