管理人 について : 参考ページ 統計的言語処理: 形態素解析パッケージ RMeCab
RCaBoChaパッケージ
日本語の係り受け関係を R で解析できるようにします.形態素解析パッケージRMeCabもご参照ください.
RCaBoCha関数 : CaBocha? の単純な出力を返す.
> kekka <- RCaBoCha("今日は鰻が食べたいな。")
FROMAT_TREE =
<DATE>今日</DATE>は---D
鰻が-D
食べたいな。
EOS
> kekka # D1 は句の連番,D2 はその係り受け関係を表す
Term1 Term2 POS D1 D2
1 今日 今日 名詞 1 2
2 は は 助詞 1 2
3 鰻 鰻 名詞 2 2
4 が が 助詞 2 2
5 食べ 食べる 動詞 3 -1
6 たい たい 助動詞 3 -1
7 な な 助詞 3 -1
8 。 。 記号 3 -1
RCaBoChaFreq?関数 : 否定の係りを判定して頻度を測る
> kekka <- RCaBoChaFreq("今日は鰻が美味しいな.
+ 昨日は鰻が美味しくなかった。")
> kekka
Term1 Freq
1 が 2
2 た 1
3 な 1
4 は 2
5 今日 1
6 昨日 1
7 美味しい 1
8 美味しい+ない 1
9 鰻 2
RCaBoChaFile?関数 : ファイルを対象に否定の係りを判定して頻度を測る.引数rmT = c("助詞", "記号") などとして,抽出しない品詞を指定可能.デフォルトは記号のみ. ただし半角スペースと全角スペース,"!?.。.!?"は常に削除する.
> kekka <- RCaBoChaFile("綺麗な花.txt")
file = 綺麗な花.txt
> kekka
Term1 Freq
1 あの 1
2 この 1
3 その 1
4 だ 1
5 だ+ない 2
6 は 2
7 は+ない 1
8 も 1
9 綺麗 1
10 綺麗+ない 2
11 花 3
RCaBoChaDF関数 : データフレームの指定列を対象に否定の係りを判定して頻度を測り,ターム・文章行列を作成.引数 rmT = c("助詞", "記号") などとして,抽出しない品詞を指定可能.デフォルトは記号のみ. ただし半角スペースと全角スペース,"!?.。.!?"は常に削除する. また minFreq引数で,全文書を通じての総頻度の閾値を指定可能.
> dat <- read.csv("data/flower.csv")
> kekka <- RCaBoChaDF(dat[,"Reply"], rmT = c("助詞"))
> kekka
OBS.1 OBS.2 OBS.3 OBS.4 OBS.5
あの 0 0 1 0 0
う 0 0 0 0 1
が 0 0 0 1 0
この 0 1 0 0 0
その 1 0 0 0 0
だ 0 1 0 1 0
だろ 0 0 0 0 1
で 1 0 1 0 0
な 0 0 0 1 1
の 0 0 0 0 1
は 1 1 0 0 1
は+ない 0 0 1 0 0
も 0 0 1 0 0
やっぱり 0 0 0 1 0
バラ 0 0 0 1 0
花 1 1 1 0 0
桜 0 0 0 0 1
綺麗 0 1 0 1 1
綺麗+ない 1 0 1 0 0
#### 重み付けも可能 TD IDF を計算して、標準化するには
> res <- RCaBoChaDF(dat[,"Reply"],rmT =c("記号","助詞"),
weight = "tf*idf*norm")
> nrow(res)
[1] 15
> res
OBS.1 OBS.2 OBS.3 OBS.4 OBS.5
あの 0.00000 0.00000 0.66658 0.00000 0.00000
う 0.00000 0.00000 0.00000 0.00000 0.43546
この 0.00000 0.70093 0.00000 0.00000 0.00000
その 0.66658 0.00000 0.00000 0.00000 0.00000
だ 0.00000 0.48993 0.00000 0.42058 0.00000
だろ 0.00000 0.00000 0.00000 0.00000 0.43546
で 0.46592 0.00000 0.46592 0.00000 0.00000
な 0.00000 0.00000 0.00000 0.00000 0.43546
の 0.00000 0.00000 0.00000 0.00000 0.43546
やっぱり 0.00000 0.00000 0.00000 0.60171 0.00000
バラ 0.00000 0.00000 0.00000 0.60171 0.00000
花 0.34854 0.36650 0.34854 0.00000 0.00000
桜 0.00000 0.00000 0.00000 0.00000 0.43546
綺麗 0.00000 0.36650 0.00000 0.31462 0.22769
綺麗+ない 0.46592 0.00000 0.46592 0.00000 0.0000
> apply(res^2, 2, sum) ## 各列の自乗の合計は1
OBS.1 OBS.2 OBS.3 OBS.4 OBS.5
1 1 1 1 1
RCaBoChaMx?関数 : フォルダ全体あるいは単独ファイルを対象に否定の係りを判定して頻度を測り,ターム・文章行列を作成.引数 rm = c("助詞", "記号") などとして,抽出しない品詞を指定可能.デフォルトは記号のみ. ただし半角スペースと全角スペース,"!?.。.!?"は常に削除する. また minFreq 引数で,全文書を通じての総頻度の閾値を指定可能.
> kekka <- RCaBoChaMx("data/flower")
file_name = data/flower/hana1.txt opened
file_name = data/flower/hana2.txt opened
file_name = data/flower/hana3.txt opened
file_name = data/flower/hana4.txt opened
file_name = data/flower/hana5.txt opened
> kekka
hana1.txt hana2.txt hana3.txt hana4.txt hana5.txt
あの 0 0 1 0 0
う 0 0 0 0 1
が 0 0 0 1 0
この 0 1 0 0 0
その 1 0 0 0 0
だ 0 1 0 1 0
だろ 0 0 0 0 1
で 1 0 1 0 0
な 0 0 0 1 1
の 0 0 0 0 1
は 1 1 0 0 1
は+ない 0 0 1 0 0
も 0 0 1 0 0
やっぱり 0 0 0 1 0
バラ 0 0 0 1 0
花 1 1 1 0 0
桜 0 0 0 0 1
綺麗 0 1 0 1 1
綺麗+ない 1 0 1 0 0
### 重み付けも可能 TD IDF を計算して、標準化するには
> res <- RCaBoChaMx("C:/data/flower" ,rmT =c("記号","助詞"),
weight = "tf*idf*norm")
file_name = C:/data/flower/hana1.txt opened
file_name = C:/data/flower/hana2.txt opened
file_name = C:/data/flower/hana3.txt opened
file_name = C:/data/flower/hana4.txt opened
file_name = C:/data/flower/hana5.txt opened
> nrow(res)
[1] 15
> res
hana1.txt hana2.txt hana3.txt hana4.txt hana5.txt
あの 0.00000 0.00000 0.66658 0.00000 0.00000
う 0.00000 0.00000 0.00000 0.00000 0.43546
この 0.00000 0.70093 0.00000 0.00000 0.00000
その 0.66658 0.00000 0.00000 0.00000 0.00000
だ 0.00000 0.48993 0.00000 0.42058 0.00000
だろ 0.00000 0.00000 0.00000 0.00000 0.43546
で 0.46592 0.00000 0.46592 0.00000 0.00000
な 0.00000 0.00000 0.00000 0.00000 0.43546
の 0.00000 0.00000 0.00000 0.00000 0.43546
やっぱり 0.00000 0.00000 0.00000 0.60171 0.00000
バラ 0.00000 0.00000 0.00000 0.60171 0.00000
花 0.34854 0.36650 0.34854 0.00000 0.00000
桜 0.00000 0.00000 0.00000 0.00000 0.43546
綺麗 0.00000 0.36650 0.00000 0.31462 0.22769
綺麗+ない 0.46592 0.00000 0.46592 0.00000 0.00000
> apply(res^2, 2, sum) ## 各列の自乗の合計は1
hana1.txt hana2.txt hana3.txt hana4.txt hana5.txt
1 1 1 1 1
## 単独ファイルも読み込み可能
> res <- RCaBoChaMx("C:/data/flower/hana1.txt")
file_name = C:/data/flower/hana1.txt opened
> res
hana1.txt
その 1
で 1
は 1
花 1
綺麗+ない 1
RCaBoChaCnt?関数 : 単独のファイルを引数として,そのファイルを文に分割し,各文の形態素数と句数をデータフレームとして出力する.
> kekka <- RCaBoChaCnt("data/merosu.txt")
file = data/merosu.txt #『走れメロス』を解析
> kekka
Nr. Terms Phrases
1 1 5 2
2 2 17 6
3 3 7 3
4 4 8 3
5 5 12 5
... 以下略
文の区切りは " !?.。.!?" である.これも引数で指定できた方が良いかな?
ここからダウンロードして,インストールしてください.
Windowsではファイルをダブルクリックし,文字コードは Shift-JISを選び,後は[続ける]を押すだけです.
Linux や Mac OS X ではかなり面倒な手続きが必要です.ここを参考にしてください.
文字コード周りを修正
以前の R-2.8.0 には文字コードに不具合があるので,できれば最新の R を利用してください.
微調整
文字コードまわりの修正を行った
RCaBoCha_0.13.zip (R-2.9.0)
RCaBoCha_0.11.zip (R-2.8.1),
RCaBoCha_0.07.zip (R-2.7.1)
README_RCaBoCha.txt (Shift-JIS)
と
付属の環境設定ファイル (CaBoChaへのPATHをWindowsの環境設定に追加したい場合は不要)
インストール手順
[1] "C:/PROGRA~1/R/R-2*~*.*/library"のように (*の部分はバージョン番号)なっていれば,R 本体と同じ場所にあります.以下の手順の4.までを実行してください.
[1] "C:\\Document and Settings\\ishida\\Documents/R/win-library/2.7"
あるいは
[1] "C:\\Users\\ishida\\Documents/R/win-library/2.7"
のようにユーザー名を含んでいる場合は,ユーザーフォルダにライブラリはインストールされています.以下の手順の4. は飛ばして,手順の5.,場合によっては 6. までを実行してください.
> .libPaths() [1] "C:\\Users\\ishida\\Documents/R/win-library/2.7" [2] "C:/PROGRA~1/R/R-27~1.1/library"
この場合は libcabocha.dll とlibcrftt.dll を win-library/2.8 の中のRCaBoCha\libs? というフォルダの中に手作業でコピーしてください。
ご利用は自己責任でお願いします.
RCaBoCha_0.13.tgz (R-2.9.0),
RCaBoCha_0.11.tgz (R-2.8.1),
RCaBoCha_0.07.tgz (R-2.7.1)
R_LIBS=/Users/ishida/Rlibsishida の部分は terminal 画面の $ マークの前に表示されているログイン名に変えてください.terminal上では以下のようにしても作成できます.
$ echo 'R_LIBS=/Users/ishida/Rlibs' > .Renviron $ cat .Renviron
以上です。なお、R 終了時にはワークスペースを保存しないことをお勧めします。言語解析結果は、一般に大きなオブジェクトになり、容量を必要とします。
ご利用は自己責任でお願いします.
RCaBoCha_0.13.tar.gz (R-2.9.0),
RCaBoCha_0.11.tar.gz (R-2.8.1),
RCaBoCha_0.07.tar.gz (R-2.7.1)
> install.packages("RCaBoCha_0.11.tar.gz", lib.loc = ".",
repos = NULL)
> library(RCaBoCha)以上です。なお、R 終了時にはワークスペースを保存しないことをお勧めします。言語解析結果は、一般に大きなオブジェクトになり、容量を必要とします。
石田基広
ishida-m(この部分を"@"に変更下さい)ias.tokushima-u.ac.jp