R2MeCab のバックアップ(No.20) - アールメカブ

アールメカブ


R2MeCab のバックアップ(No.20)


RMeCabの簡易版

テキストマイニングのためのツール: データ解析・グラフィックス環境 R から日本語形態素解析ソフト和布蕪(MeCab)を呼び出して使うインターフェイス

_ 参考文献

  • テキストマイニング入門RMeCabを利用したテキストマイニングについては を参照いただければ幸いです.

_ 開発状況

  • 2009年 8月25日 R2MeCab_0.12 (R-2.10.0 対応): MeCab_0.98 とあわせたバイナリ。そのほかに変更なし.
  • &color(green){2009年 8月25日 R2MeCab_0.11 (R-2.9.2対応): ;
  • 2009年 8月24日 R2MeCab_0.10: docDF()関数にバグがあったので修正.
  • 2009年 4月18日 R2MeCab_0.08: R-2.9.0への対応
  • 2009年 3月29日 R2MeCab_0.07: docDF()関数の効率が悪かった(解析に異常に時間がかかった)の修正.
  • 2009年 3月27日 R2MeCab_0.06: NgramDF2()関数にバグがあったのを修正.またフリーズと誤解されないよう解析中に * を出力するようにした.
  • 2009年 3月23日 docDF()関数に共起行列を作成する co 引数を追加
  • 2009年 3月10日 R2MeCab_0.04:デフォルトの出力を全タームに変更
  • 2009年 3月9日 R2MeCab_0.03:微調整
  • 2009年 3月6日 R2MeCab_0.02:微調整
  • 2009年 3月6日 R2MeCab_0.01: 汎用的な docDF()関数の他に RMeCabC(), RMeCabText?()を実装

_ 機能

  • docDF()関数

第 1 引数で指定されたファイル (フォルダが指定された場合は,その中の全ファイル),あるいは第1引数でデータフレームを,また第 2 引数で列(番号あるいは名前)を指定して,Ngram行列,あるいはターム・文書行列を作成する.指定可能な引数は

  • target : 引数はファイル名ないしフォルダ名,あるいはデータフレーム
  • column : はデータフレームを指定する場合,列(番号あるいは名前)を指定する
  • type : 0 は文字のGramを 1はタームのGramを作成.デフォルトは0
  • pos : 引数は pos = c("名詞", "形容詞","記号") のように指定する.指定されない場合は記号を含め,すべてを抽出.
  • minFreq : 全文書を通じての総頻度の閾値を指定する.デフォルトのminFreq = 1では,どれか一つの文書に一度だけ出現したタームも,出力含めます.対象文書の分量が多い場合は 3 などを指定することを検討ください.
  • N: は Ngram の場合の N の数.デフォルトは1
  • Genkei:活用語を原型 (0) にするか,表層形(1) にするか.デフォルトは 0.
  • weight = "tf*idf*norm" などの重みを指定可能.デフォルトは重み無し.
  • nDF : N個のタームそれぞれを独立した列に取る.デフォルトは 0:nDF = 1 とすると,タームごとに列を取ります.
  • co 共起行列の作成

Ngram

> setwd("C:/data")
> (res <- docDF("doc")) # docフォルダの全ファイルを対象に
file = doc1.txt
file = doc2.txt
file = doc3.txt
file_name =  doc/doc1.txt opened
file_name =  doc/doc2.txt opened
file_name =  doc/doc3.txt opened
number of extracted terms = 15
now making a data frame. wait a while!
   Ngram doc1.txt doc2.txt doc3.txt
1     。        1        1        1
2     い        0        0        1
3     す        1        1        1
4     で        1        1        1
5     の        0        1        0
6     は        1        1        1
7     ま        0        0        1
8     を        0        0        1
9     ん        0        0        1
10    女        0        1        1
11    学        1        2        2
12    彼        0        1        1
13    数        0        1        1
14    生        1        1        0
15    私        1        0        0 

ターム・文章行列

>  (res <- docDF("doc", type = 1, N=1))
file = doc1.txt
file = doc2.txt
file = doc3.txt
file_name =  doc/doc1.txt opened
file_name =  doc/doc2.txt opened
file_name =  doc/doc3.txt opened
number of extracted terms = 13
now making a data frame. wait a while!
   TERM   POS1     POS2 doc1.txt doc2.txt doc3.txt
1    。   記号     句点        1        1        1
2  いる   動詞   非自立        0        0        1
3    で   助詞 接続助詞        0        0        1
4  です 助動詞        *        1        1        0
5    の   助詞   連体化        0        1        0
6    は   助詞   係助詞        1        1        1
7  ます 助動詞        *        0        0        1
8    を   助詞   格助詞        0        0        1
9  学ぶ   動詞     自立        0        0        1
10 学生   名詞     一般        1        1        0
11 彼女   名詞   代名詞        0        1        1
12 数学   名詞     一般        0        1        1
13   私   名詞   代名詞        1        0        0

名詞と形容詞を対象にTri-gramで行列

> (res <- docDF("doc", pos = c("名詞","形容詞"), type = 1, N=3))
number of extracted terms = 1
           TERM           POS1             POS2

1 彼女-数学-学生 名詞-名詞-名詞 代名詞-一般-一般 
                      doc1.txt doc2.txt  doc3.txt
                       0        1        0

データフレームを解析する

> (target <- read.csv("photo.csv"))
  ID Sex              Reply
1  1   M   写真とってくれよ
2  2   F 写真とってください
3  3   M       写真とってね
4  4   F 写真とってください
5  5   M     写真とってっす

# データフレームの3列目からBi-gram行列

> (res <- docDF(target, col = 3, N = 2)) 
       # col はデータフレーム列あるいは名前
number of extracted terms = 13
   Ngram Row1 Row2 Row3 Row4 Row5
1  く-だ    0    1    0    1    0
2  く-れ    1    0    0    0    0
3  さ-い    0    1    0    1    0
4  だ-さ    0    1    0    1    0
5  っ-す    0    0    0    0    1
6  っ-て    1    1    1    1    1
7  て-く    1    1    0    1    0
8  て-っ    0    0    0    0    1
9  て-ね    0    0    1    0    0
10 と-っ    1    1    1    1    1
11 れ-よ    1    0    0    0    0
12 写-真    1    1    1    1    1
13 真-と    1    1    1    1    1

タームのバイグラム

> (res <- docDF(target, col = 3, type = 1, N = 2))
number of extracted terms = 7
now making a data frame. wait a while!
         TERM        POS1            POS2 Row1 Row2 Row3 Row4 Row5
1   くれる-よ   動詞-助詞   非自立-終助詞    1    0    0    0    0
2 て-くださる   助詞-動詞 接続助詞-非自立    0    1    0    1    0
3   て-くれる   助詞-動詞 接続助詞-非自立    1    0    0    0    0
4     て-っす 助詞-助動詞      接続助詞-*    0    0    0    0    1
5       て-ね   助詞-助詞 接続助詞-終助詞    0    0    1    0    0
6     とる-て   動詞-助詞   自立-接続助詞    1    1    1    1    1
7   写真-とる   名詞-動詞       一般-自立    1    1    1    1    1

タームのバイグラムを表層形で

> (res <- docDF(target, col = 3, type = 1, N = 2, Genkei = 1))
number of extracted terms = 7
now making a data frame. wait a while!
         TERM        POS1            POS2 Row1 Row2 Row3 Row4 Row5
1     くれ-よ   動詞-助詞   非自立-終助詞    1    0    0    0    0
2 て-ください   助詞-動詞 接続助詞-非自立    0    1    0    1    0
3     て-くれ   助詞-動詞 接続助詞-非自立    1    0    0    0    0
4     て-っす 助詞-助動詞      接続助詞-*    0    0    0    0    1
5       て-ね   助詞-助詞 接続助詞-終助詞    0    0    1    0    0
6     とっ-て   動詞-助詞   自立-接続助詞    1    1    1    1    1
7   写真-とっ   名詞-動詞       一般-自立    1    1    1    1    1

各タームを独立に列を取って

> (res <- docDF("doc", type=1, N=2,pos = c("名詞","動詞"),
          Genkei = 1, nDF = 1))
...
number of extracted terms = 5
now making a data frame. wait a while!
    N1   N2      POS1        POS2 doc1.txt doc2.txt doc3.txt
1 学ん   い 動詞-動詞 自立-非自立        0        0        1
2 彼女 数学 名詞-名詞 代名詞-一般        0        1        1
3 数学 学ん 名詞-動詞   一般-自立        0        0        1
4 数学 学生 名詞-名詞   一般-一般        0        1        0
5   私 学生 名詞-名詞 代名詞-一般        1        0        0 

共起行列

> (res <- docDF("data/doc", type = 1, co = 1))
file_name =  data/doc/doc1.txt opened
file_name =  data/doc/doc2.txt opened
file_name =  data/doc/doc3.txt opened
number of extracted terms = 13
now making a data frame. wait a while!
   TERM   POS1     POS2 。 いる で です の は ます を 学ぶ 学生 彼女 数学 私
1    。   記号     句点  3    1  1    2  1  3    1  1    1    2    2    2  1
2  いる   動詞   非自立  1    1  1    0  0  1    1  1    1    0    1    1  0
3    で   助詞 接続助詞  1    1  1    0  0  1    1  1    1    0    1    1  0
4  です 助動詞        *  2    0  0    2  1  2    0  0    0    2    1    1  1
5    の   助詞   連体化  1    0  0    1  1  1    0  0    0    1    1    1  0
6    は   助詞   係助詞  3    1  1    2  1  3    1  1    1    2    2    2  1
7  ます 助動詞        *  1    1  1    0  0  1    1  1    1    0    1    1  0
8    を   助詞   格助詞  1    1  1    0  0  1    1  1    1    0    1    1  0
9  学ぶ   動詞     自立  1    1  1    0  0  1    1  1    1    0    1    1  0
10 学生   名詞     一般  2    0  0    2  1  2    0  0    0    2    1    1  1
11 彼女   名詞   代名詞  2    1  1    1  1  2    1  1    1    1    2    2  0
12 数学   名詞     一般  2    1  1    1  1  2    1  1    1    1    2    2  0
13   私   名詞   代名詞  1    0  0    1  0  1    0  0    0    1    0    0  1

長文テキスト集合

> res <- docDF("writers", type = 1, N=1)
## 鴎外と漱石あわせて 8 テキスト.解析に数分かかります
> head(res)
      TERM   POS1     POS2 ogai_gan.txt ...
1        '   名詞 サ変接続            0  ...
2        ,   名詞 サ変接続            0  ...   
3     あい   名詞     一般            0  ...      
4     あか   名詞     一般            0  ...     
5 あかるい 形容詞     自立            0  ...
6 あざやか   名詞     一般            0  ...
...
  • RMeCabC()関数 : 短文の処理
    > library(RMeCab)
    > kekka <- RMeCabC("すもももももももものうち")
    > unlist(kekka)

    # 第二引数 1 を加えると形態素原型を返します.

    > kekka <- RMeCabC("ご飯を食べた", 1)
    > unlist(kekka)
    #    名詞     助詞     動詞   助動詞 
    #  "ご飯"     "を" "食べる"     "た" 
    # 第二引数なしだと
    > kekka <- RMeCabC("ご飯を食べた")
    > unlist(kekka)
    #    名詞     助詞     動詞   助動詞 
    # "ご飯"   "を" "食べ"   "た" 
    # 名詞だけ取り出したければ
    unlist(kekka) [names(unlist(kekka)) == "名詞"]
    # ご飯
    # R-2.8.0 をMacOSXやLinuxでご利用の場合は
    # 以下の3行を実行しないと動作しないかもしれません
    kekka <- unlist(kekka)
    Encoding(kekka) <- "UTF-8"
    Encoding(names(kekka)) <- "UTF-8"
  • RMeCabText?()関数 : ファイルの解析結果をそのまま表示

    # その他,和布蕪の出力をそのままリスト形式で出力する関数

    >  RMeCabText("data/sakura.txt")
    
    # こんな結果
    #[[1]]
    # [1] "昨日"     "名詞"     "副詞可能" "*"        "*"        "*"       
    # [7] "*"        "昨日"     "キノウ"   "キノー"  
    #
    #[[2]]
    # [1] "も"     "助詞"   "係助詞" "*"      "*"      "*"      "*"      "も"    
    # [9] "モ"     "モ"    

_ インストール手順

MeCabをインストールします.Macintosh および Linux の場合はここを参考にしてください

  • Windows の方は,まずMeCabをインストールしてください.ここ から win32バイナリmecab-0.98.exe をダウンロードしてインストールします.インストール先は標準設定のまま C:\Program Files\MeCab とします.また文字コードは Shit-Jis のままとします.
  • MeCab?インストール後 Windowsの環境設定で MeCab? へのパスを通します. すなわちコントロール・パネルの[システム]アイテムを起動し、 表示される[システムのプロパティ]ダイアログの[詳細設定]タブ (Windows 2000では[詳細]タブ) をクリックし、[システム環境変数] の PATH の最後に
    ;C:\Program Files\MeCab\bin\
    を追記します.先頭のセミコロンを忘れないようにしてください.
  • 次に R2MeCab_***.zip をRにインストールします.*** の部分はバージョン番号です.Rのメニューから[パッケージ][ローカルにあるzipファイルからのパッケージのインストール]を選んで,ダウンロードした R2MeCab_***.zipファイルを選んでインストールします.[win-libraryを作成したいのですか] と聞いてきた時は OK を押してください(この際,R はユーザーフォルダを作成します).

_ ダウンロード

  • Windows

fileR2MeCab_0.12.zip for R-2.10.0 :Windows

fileR2MeCab_0.11.zip for R-2.9.2 :Windows

fileR2MeCab_0.10.zip for R-2.9.1 : Windows

fileR2MeCab_0.07.zip for R-2.8.1

  • Macintosh

&ref(): File not found: "R2MeCab_0.12.tgz" at page "R2MeCab"; for R-2.10.0 :

fileR2MeCab_0.11.tgz for R-2.9.2 :

fileR2MeCab_0.10.tgz for R-2.9.1 :

fileR2MeCab_0.07.tgz for R-2.8.1

  • Linux

fileR2MeCab_0.12.tar.gz for R-2.10.0 :

fileR2MeCab_0.11.tar.gz for R-2.9.2 :

fileR2MeCab_0.10.tar.gz for R-2.9.1 :

fileR2MeCab_0.07.tar.gz for R-2.8.1

_ R の参考書

  • 中級者になるために.
  • 解析をばりばり行うために.
  • データをばりばり処理するために.
  • R のプログラミングテクニックを学ぶために.
  • R での解析手法に慣れるために.
  • とにかく R を使ってみたい.
  • 統計学と R を同時に学びたい.

_ お問い合わせ

ishida-m(at_mark)ias.tokushima-u.ac.jp にお願いします.