LoginSignup
4
4

More than 5 years have passed since last update.

MeCabを使ってみる

Last updated at Posted at 2015-08-04

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から使用するには以下のようになります。

test1.pl
#!/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

分かち書きのみの場合も同様です。

test2.pl
#!/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オプションを付けることで、品詞推定を抑制することが出来ます。

test3.pl
#!/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'という単語は辞書に入ってなかったことが分かります。

次に辞書に単語を追加してみます。詳しいことは単語の追加方法に載っていますので、ここでは簡単に書いておきます。辞書ファイルは次のような形式で用意します。

user.csv
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という単語が登録されていることが確認できました。
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4