2011/6/3の過去ブログの転載です。内容的に古い可能性があるのでご注意ください。
まずはMeCabのインストール。MeCabのサイトからtarballを取ってきてコンパイルしてもいいのですが、今回はFreeBSD上で使うのでportsからインストールしました。インストールしたのは以下のものです。
- ja-mecab-0.98 Yet Another Part-of-Speech and Morphological Analyzer
- ja-mecab-ipadic-2.7.0.20070801 Japanese Morphological Dictionary for MeCab
- ja-p5-MeCab-0.98 MeCab library module for Perl5
今回はPerlから使用するので、そのためのパッケージもインストールしました。
まずはコマンドラインから実験です。実行する前にLANG=ja_JP.eucJPを設定しておきます(標準の辞書がEUC-JPのため)。
$ mecab
MeCabは便利だな
MeCab 名詞,固有名詞,組織,*,*,*,*
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
便利 名詞,形容動詞語幹,*,*,*,*,便利,ベンリ,ベンリ
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
な 助詞,終助詞,*,*,*,*,な,ナ,ナ
EOS
^D
うまくいってますね。品詞情報が必要なく、単に分かち書きとしてだけ使用するなら、-Owakatiで出力フォーマットを指定します。
$ mecab -Owakati
MeCabは便利だな
MeCab は 便利 だ な
^D
出力フォーマットはmecabrcにて自由に設定することが出来ます。
Perlから使用するには以下のようになります。
#!/usr/bin/perl
use strict;
use warnings;
use MeCab;
my $mecab = new MeCab::Tagger ("");
my $node = $mecab->parseToNode( 'MeCabは便利だな' );
while( $node = $node->{next} ) {
printf( "%s %s %s\n", $node->{surface}, $node->{feature}, $node->{cost}
);
}
$ ./test1.pl
MeCab 名詞,固有名詞,組織,*,*,*,* 12857
は 助詞,係助詞,*,*,*,*,は,ハ,ワ 12995
便利 名詞,形容動詞語幹,*,*,*,*,便利,ベンリ,ベンリ 17535
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ 19356
な 助詞,終助詞,*,*,*,*,な,ナ,ナ 19878
BOS/EOS,*,*,*,*,*,*,*,* 16752
分かち書きのみの場合も同様です。
#!/usr/bin/perl
use strict;
use warnings;
use MeCab;
my $mecab = new MeCab::Tagger ("-Owakati");
print $mecab->parse( 'MeCabは便利だな' );
$ ./test2.pl
MeCab は 便利 だ な
MeCabは辞書にない単語が出現した場合、品詞を推定して形態素解析を行うのですが、--unk-featureオプションを付けることで、品詞推定を抑制することが出来ます。
#!/usr/bin/perl
use strict;
use warnings;
use MeCab;
my $mecab = new MeCab::Tagger ("--unk-feature unknown");
my $node = $mecab->parseToNode( 'MeCabは便利だな' );
while( $node = $node->{next} ) {
printf( "%s %s %s\n", $node->{surface}, $node->{feature}, $node->{cost}
);
}
MeCab unknown 12857
は 助詞,係助詞,*,*,*,*,は,ハ,ワ 12995
便利 名詞,形容動詞語幹,*,*,*,*,便利,ベンリ,ベンリ 17535
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ 19356
な 助詞,終助詞,*,*,*,*,な,ナ,ナ 19878
BOS/EOS,*,*,*,*,*,*,*,* 16752
'MeCab'という単語は辞書に入ってなかったことが分かります。
次に辞書に単語を追加してみます。詳しいことは単語の追加方法に載っていますので、ここでは簡単に書いておきます。辞書ファイルは次のような形式で用意します。
MeCab,1223,1223,6058,名詞,固有名詞,*,*,*,*,MeCab,メカブ,メカブ
辞書をコンパイルします。
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic/
-u user.dic -f euc-jp -t euc-jp user.csv
reading user.csv ... 1
emitting double-array: 100% |###########################################|
done!
$ ls -l
total 13033036
-rwxr-xr-x 1 aoyagi aoyagi 256 6月 3 20:45 test1.pl
-rwxr-xr-x 1 aoyagi aoyagi 142 6月 3 20:45 test2.pl
-rwxr-xr-x 1 aoyagi aoyagi 277 6月 3 20:45 test3.pl
-rw-r--r-- 1 aoyagi aoyagi 63 6月 3 20:59 user.csv
-rw-r--r-- 1 aoyagi aoyagi 3050 6月 3 20:59 user.dic
これでユーザ辞書が出来上がりました。次にMeCabに辞書のありかを教えてあげなければいけません。/usr/local/etc/mecabrcというファイルに以下を追記します。
userdic = /home/aoyagi/user.dic
test3.plを再度実行してみます。
$ ./test3.pl
MeCab 名詞,固有名詞,*,*,*,*,MeCab,メカブ,メカブ 7235
は 助詞,係助詞,*,*,*,*,は,ハ,ワ 11483
便利 名詞,形容動詞語幹,*,*,*,*,便利,ベンリ,ベンリ 16023
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ 17844
な 助詞,終助詞,*,*,*,*,な,ナ,ナ 18366
BOS/EOS,*,*,*,*,*,*,*,* 15240</pre>
MeCabという単語が登録されていることが確認できました。