2012年5月2日水曜日

『RMeCab の使い方』 (code、他)


『RMeCab の使い方』
http://rmecab.jp/wiki/index.php?plugin=attach&refer=RMeCab&openfile=manual.pdf より


RMeCabC() 関数
> res <- RMeCabC("すもももももももものうち")
> res[[1]] # リストの各要素,つまり各形態素にアクセスする
> unlist(res)

> x <- "すもももももももものうち" # オブジェクトに代入してもよい
> res <- RMeCabC(x)

> res <- RMeCabC("ご飯を食べた", 1)
> unlist(res) # 形態素原形を出力

> res <- RMeCabC("ご飯を食べた", 0)
> unlist(res) # 形態素表層形を出力


> res <- RMeCabC("すもももももももものうち")
> res2 <- unlist(res)
> res2[names(res2) == "名詞"]
> names(res2) == "名詞" # 比較演算子の働きを確認
> res3 <- names(res2) == "名詞"
> res3
> which(res3)
> any(res3)



RMeCabFreq() 関数
RMeCabFreq() 関数は指定されたファイルを形態素解析し,活用形は原形に変換した上で,その頻度を数え,結果をデータフレームとして返す.なお出力には句読点などの記号とその頻度も含まれている.

> pt1 <- proc.time()  # 起動後の経過を取得
> res <- RMeCabFreq("kumo.txt")
> pt2 <- proc.time()  # 実行時間を見る
> pt2 - pt1          # 単純な引き算



ターム・文書行列
テキストマイニングを実行する場合,対象とするテキストの集合から,ターム・文書行列(term-document matrix) を作成することがある.ターム・文書行列とは次のような行列である.

Term doc1 doc2 doc3
は    1   1   1
学生   1   1   0
僕    1   0   0
彼女   0    1    1
で    0    0    1
を    0    0    1
数学  0   0   1

テキストマイニングでは,文書間の内容的な近さを分析しようとすることがしばしばある.その際,一部のテキストの集合では高い頻度で使われているタームが,別のテキストの集合ではほとんど出現しないことがある.このようなタームは,テキストをテーマごとに分類する手がかりになることが多い.そこで,あるタームがある文書で出現している頻度をまとめた表を作成すると便利である.そのような表をターム・文書行列と呼び,テキスト解析の出発点となる.
=> docMatrix() 関数は第1 引数で指定されたフォルダ内のすべてのファイルを読み込んで,ターム・文書行列を作成する


テキスト解析では,タームを内容語と機能語に分けることがある.
内容語とは,名詞や形容詞,動詞であり,これらはテキストの内容を直接表現する単語類である.
一方,機能語は助詞などであり,テキストを文法的に成立させるために必要な要素類である.

内容語は,テキスト集合をテーマごとに分類するという課題では重要なターム
機能語は、解析の目的が書き手の癖を抽出するような場合には,使われ方が重要


行列の重み付け

テキストをタームの頻度をもとに分析する場合,タームの頻度をそのまま利用するのではなく,そ
のタームがテキスト内に占める重要度を考慮すべきである.これはテキストマイニングにおいては重みとして実現することができる.重みとは,ある文書におけるタームの相対的重要度を示す概念である.
重みには

「局所的重み(local weight)」
「大域的重み(global weight)」
「正規化(normalization)」

の3 種がある.

局所的重みは索引語頻度(term frequency; TF) などとも呼ばれ,ある文書に多く現れる語ほど大きな重みを与えられる.単純にはその語の出現頻度が使われる.
一方,大域的重みは文書集合全体を考慮して各語に重み付けを行うもので,IDF (inverse document frequency) と呼ばれる指標が使われる場合が多い.これは,すべての文書に出現しているタームよりは,一部の文書にのみ出現するタームに大きな重みを与える方法である.
最後の正規化は,長い文書ほど含まれる語が多くなるため,重みも大きくなってしまうが,こうし
た文書の長さによる影響を調整することである.
ターム・文書行列の重みは,これら三つの重みを組み合わせて作成される.重みについて詳細は北他(2002) や徳永(1999) を参照


docMatrix() 関数は,抽出された各形態素の頻度に「重み」を付けることができる.この関数は,局所的重みとしてtf (索引語頻度), tf2 (対数化索引語頻度: logarithimic TF),tf3 (2 進重み: binary weight) を,また大域的重みとしてidf (文書頻度の逆数),idf2 (大域的IDF),idf3 (確率的IDF),idf4 (エントロピー) を,さらに正規化についてはnorm (コサイン正規化) を実装している.これらの重み付けを利用する場合はweight引数に,それぞれの重みを* でつなげた文字列を指定する.

> res <- docMatrix("doc", pos = c("名詞","形容詞","助詞"), weight = "tf")
> res <- docMatrix("doc", pos = c("名詞","形容詞","助詞"), weight = "tf*idf")
> res <- docMatrix("doc", pos = c("名詞","形容詞","助詞"), weight = "tf*idf*norm")



N-gram

N-gram とは文字あるいは形態素,または品詞がN 個つながった組み合わせのことである.例えば「国境の長いトンネル」という文字列を,文字を単位として区切ることにし,さらにN を2 に取れば,下の組み合わせになる.すると,最初に[国- 境] の二文字のペア,さらに右に移動すると[境- の] の二文字のペアが認められ,以下同様にして,最後に[ネ- ル] の組み合わがある.なおN が2 の場合をbi-gram (バイグラム)という.

国 境
境 の
の 長
長 い
い ト
ト ン
ン ネ
ネ ル

形態素単位で分割し,N を2 に取るならば,以下の組み合わせとなる.
国境  の
の   長い
長い  トンネル

品詞情報でbi-gram を作れば,「国境」は名詞,「の」は助詞,「長い」は形容詞,そして「トンネル」は名詞と判断されて,bi-gram は表2–5 の組み合わせとなる.

名詞   助詞
助詞   形容詞
形容詞 名詞
 Ngram() 関数は,文字あるいは形態素,または品詞がN 個つながった組み合わせの総数を求める.





語の共起関係


言語学で共起(collocation) とは,ある語が別の特定の語と隣接して現れる(共起する) ことをいう.

collocate() 関数

> res <- collocate("kumo.txt", node = "極楽", span = 3)

出力されるデータフレームにはキーワード自身も含まれているので注意されたい.Span 列は指定されたウィンドウでの出現頻度,Total はテキスト全体での出現頻度である.またデータフレーム末尾の2 行で[[MORPHEMS]] は形態素の種類の数を,[[TOKENS]] は総語数を意味する.なお,どちらにも中心語自身の頻度が含まれている.

T: (実測値- 期待値) ÷ 実測値の平方根
MI: (共起回数÷ 共起語の期待値) の対数  log2( 4 / ((4/1808) * 10 * 3 * 2))

> res2 <- collScores(res, node = "極楽", span = 3)
> res2[25:33,]

極楽は中心語であるので各指標は計算されずNA で埋められる.同じく[[MORPHEMS]] と[[TOKENS]] の指標もNA とされている.この場合,T 値は約1.9 *であり,2 に近い.「極楽」と「蓮池」の共起回数は有意に多いと考えてよいであろう.またMI に関しても約4.9 であり,先ほど記述した基準の1.58 を大きく越えている.
従って,二つのタームの間には強い共起の関係があると考えてよいだろう.

*:T 値の評価であるが,統計学では,T の絶対値が2 が越えるかどうかを簡易的な目安にすることがあるが,コーパス言語学では1.65 以上であれば,二つのタームの共起は偶然ではないと考えるようである(Churchet al., 1991).



参考文献
Barnbrook, Geoff (1996) Language and Computers: Edinburgh.

Church, K. W., W. Gale, P. Hanks, and D. Hindle (1991) “Using statistics in lexical analysis”, in Using On-line Resources to Build a Lexicon: Lawrence Erlbaum, pp. 115–164.

ブライアン・エヴェリット(2007) 『R とS-PLUS による多変量解析』,シュプリンガー・ジャパン,第1 版. 石田基広,石田和枝,掛井秀一訳.

徳永健伸(1999) 『言語と計算5 - 情報検索と言語処理』,東京大学出版会.

北研二・津田和彦・獅子堀正幹(2002) 『情報検索アルゴリズム』,共立出版.

ウーヴェ・リゲス(2006) 『R の基礎とプログラミング技法』,シュプリンガー・ジャパン,第3 版.石田基広訳.





0 件のコメント:

コメントを投稿