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

アールメカブ


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


RMeCab

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

_ 参考文献

_ 開発状況

  • 2009年 3月6日 R2MeCab_0.01: 汎用的な docDF()関数の他に RMeCabC(), RMeCabText?()を実装

_ 機能

RMeCab機能?にある三つの関数が使えます.

  • docDF()関数 2009年3月5日追加 2009 年 3月 5日 新規追加 『Rによるテキストマイニング入門』森北書店には記載がありません.

第 1 引数で指定されたファイル (フォルダが指定された場合は,その中の全ファイル),あるいは第1引数でデータフレームを,また第 2 引数で列(番号あるいは名前)を指定して,Ngram行列,あるいはターム・文書行列を作成する.指定可能な引数は target, column = 0, type = 0, pos = c("名詞","形容詞"), minFreq = 1, N = 2, sym = 0, kigo = "記号", Genkei = 0, weight = ""

  • target : 引数はファイル名ないしフォルダ名,あるいはデータフレーム
  • column = 0: はデータフレームを指定する場合,列(番号あるいは名前)を指定する
  • type = 0: 0 は文字のGramを 1はタームのGramを作成
  • pos : 引数は pos = c("名詞", "形容詞","記号") のように指定する
  • minFreq : 引数には頻度の閾値を指定するが,docMatrix() 関数の場合とは異なり,全テキストを通じての総頻度を判定対象とする.例えば minFreq=2 と指定した場合,どれか一つの文書で頻度が二つ以上のタームは,これ以外の各文書に一度しか出現していなくとも,出力のターム・文書行列に含まれる. docMatrix() 関数では,文書のごとの最低頻度であった. したがって,doc1という文書で二度以上出現しているタームが,他の文書で一度しか出現していない場合,このタームは出力のターム.文書行列に含まれるが,doc1以外の文書の頻度は一律 0 にされる
  • N: は Ngram の場合の N の数
  • sym: 未実装.
  • kigo = "記号": は総計に記号を含むか含まないか.sym = 1 が指定された場合は数える
  • Genkei = 0 :活用語を原型 (0) にするか,表層形(1) にするか
  • weight = "tf*idf*norm" などを指定可能
  • nDF =0: type=1 の場合で,N個のタームそれぞれを独立した列に取る.
> (res <- docDF(target, col = 3)) # 文字の抽出
number of extracted terms = 13
now making a data frame. wait a while!
   Ngram Row1 Row2 Row3 Row4 Row5
1     い    0    1    0    1    0
2     く    1    1    0    1    0
3     さ    0    1    0    1    0
4     す    0    0    0    0    1
5     だ    0    1    0    1    0
6     っ    1    1    1    1    2
7     て    1    1    1    1    1
8     と    1    1    1    1    1
9     ね    0    0    1    0    0
10    よ    1    0    0    0    0
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,
        pos = c("名詞","動詞")))
# 名詞と動詞を対象に Bi-gramで行列  
number of extracted terms = 3
now making a data frame. wait a while!
           TERM      POS1        POS2 Row1 Row2 Row3 Row4 Row5
1 とる-くださる 動詞-動詞 自立-非自立    0    1    0    1    0
2   とる-くれる 動詞-動詞 自立-非自立    1    0    0    0    0
3     写真-とる 名詞-動詞   一般-自立    1    1    1    1    1
> setwd("C:/data")
> (res <- docDF("doc")) # docフォルダの全ファイルを対象に
                        # 文字の Bi-gram
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 = 19
     Ngram doc1.txt doc2.txt doc3.txt
1  [い-ま]        0        0        1
2  [す-。]        1        1        1
3  [で-い]        0        0        1
4  [で-す]        1        1        0
5  [の-学]        0        1        0
6  [は-学]        1        0        0
7  [は-数]        0        1        1
8  [ま-す]        0        0        1
9  [を-学]        0        0        1
10 [ん-で]        0        0        1
11 [女-は]        0        1        1
12 [学-の]        0        1        0
13 [学-を]        0        0        1
14 [学-ん]        0        0        1
15 [学-生]        1        1        0
16 [彼-女]        0        1        1
17 [数-学]        0        1        1
18 [生-で]        1        1        0
19 [私-は]        1        0        0
>  (res <- docDF("doc", type = 1, N=1))
 # 名詞と形容詞を対象にターム・文章行列
...
number of extracted terms = 4
  TERM POS1   POS2 doc1.txt doc2.txt doc3.txt
1 学生 名詞   一般        1        1        0
2 彼女 名詞 代名詞        0        1        1
3 数学 名詞   一般        0        1        1
4   私 名詞 代名詞        1        0        0

> (res <- docDF("doc", pos = c("名詞","形容詞"), type = 1, N=3))
# 名詞と形容詞を対象にTri-gramで行列  
number of extracted terms = 1
           TERM           POS1             POS2

1 彼女-数学-学生 名詞-名詞-名詞 代名詞-一般-一般 
                      doc1.txt doc2.txt  doc3.txt
                       0        1        0
> (res <- docDF("doc", type=1, N=1,pos = c("名詞","動詞")))
  # 名詞と動詞対象にターム・文章行列  
number of extracted terms = 6
  TERM POS1   POS2 doc1.txt doc2.txt doc3.txt
1 いる 動詞 非自立        0        0        1
2 学ぶ 動詞   自立        0        0        1
3 学生 名詞   一般        1        1        0
4 彼女 名詞 代名詞        0        1        1
5 数学 名詞   一般        0        1        1
6   私 名詞 代名詞        1        0        0
> 
> # データフレームを解析する
> (target <- read.csv("photo.csv"))
  ID Sex              Reply
1  1   M   写真とってくれよ
2  2   F 写真とってください
3  3   M       写真とってね
4  4   F 写真とってください
5  5   M     写真とってっす
> (res <- docDF(target, col = 3)) 
       # col はデータフレーム列あるいは名前
# データフレームの3列目からBi-gram行列
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, N=1, col = 3))
 # データフレームの3列目から文字頻度
number of extracted terms = 13
   Ngram Row1 Row2 Row3 Row4 Row5
1   [い]    0    1    0    1    0
2   [く]    1    1    0    1    0
3   [さ]    0    1    0    1    0
4   [す]    0    0    0    0    1
5   [だ]    0    1    0    1    0
6   [っ]    1    1    1    1    2
7   [て]    1    1    1    1    1
8   [と]    1    1    1    1    1
9   [ね]    0    0    1    0    0
10  [よ]    1    0    0    0    0
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 = 1,
         pos = c("名詞","動詞")))
# データフレームの3列目からターム・文章行列
number of extracted terms = 4
      TERM POS1   POS2 Row1 Row2 Row3 Row4 Row5
1 くださる 動詞 非自立    0    1    0    1    0
2   くれる 動詞 非自立    1    0    0    0    0
3     とる 動詞   自立    1    1    1    1    1
4     写真 名詞   一般    1    1    1    1    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] "モ"     "モ"    

_ インストール手順

基本的に RMeCab と変わりませんので,詳細はそちらを参考にしてください.

  • まずMeCabをインストールしてください.ここ から win32バイナリmecab-0.97.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 はユーザーフォルダを作成します).

_ ダウンロード

このページ一番下のファイルをクリックしてください.ファイル名が変更されないように注意してください.