You Are Reading

MeCab on Perl

せっかく、MeCab を 入れたので
Perlでも、動かしてみたくなりました。
CPANモジュール の Text::MeCab を 使わせて頂きます。

Text::MeCab インストール
$ cpanm --sudo Text::MeCab
--> Working on Text::MeCab
Fetching http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/Text-MeCab-0.20008.tar.gz ... OK
Configuring Text-MeCab-0.20008 ... N/A

! Configure failed for Text-MeCab-0.20008. See .cpanm/build.log for details.

(! Configure failed) .cpanm/build.log から詳細をみると
Devel::CheckLib が足りないようなので追加

$ cpanm --sudo Devel::CheckLib
$ cpanm --sudo Text::MeCab

! Configure failed for Text-MeCab-0.20008. See .cpanm/build.log for details.

(! Configure failed) .cpanm/build.log から詳細をみると
ライブラリが読み込めないようなのでパスを通します。

# more /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
# ldconfig 

$ cpanm --sudo Text::MeCab
$ cpan -a |grep -i "MeCab"
Text::MeCab                 0.20008   0.20008  D/DM/DMAKI/Text-MeCab-0.20008.tar.gz
Text::MeCab::Dict             undef     undef  D/DM/DMAKI/Text-MeCab-0.20010.tar.gz

インストールが出来ました。
.cpanm/build.log から詳細をみると
.....
Encoding of your mecab dictionary? (shift_jis, euc-jp, utf-8) [euc-jp] euc-jp
Using euc-jp as your dictionary encoding
.....

辞書データが euc-jp で 選ばれているようです。
utf-8 にしたいのですが、変更する方法がわかりません。
...気になってしょうがないので、一度モジュールを削除して
cpan から、インストールしてみることにしました。


CPANモジュールをアンインストール
# perl -MConfig -MExtUtils::Install -e '($FULLEXT=shift)=~s{-}{/}g;uninstall "$Config{sitearchexp}/auto/$FULLEXT/.packlist", 1' Text/MeCab
unlink /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Text/MeCab.pm
unlink /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Text/MeCab/Dict.pm
unlink /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Text/MeCab/Node.pod
unlink /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Text/MeCab/MeCab.bs
unlink /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Text/MeCab/MeCab.so
unlink /usr/share/man/man3/Text::MeCab.3pm
unlink /usr/share/man/man3/Text::MeCab::Dict.3pm
unlink /usr/share/man/man3/Text::MeCab::Node.3pm
unlink /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Text/MeCab/.packlist

# cpan -a |grep -i "mecab"

# cpan
cpan> install Text::MeCab
.....
Encoding of your mecab dictionary? (shift_jis, euc-jp, utf-8) [euc-jp] utf-8
Using utf-8 as your dictionary encoding
.....

# cpan -a |grep -i "mecab"
Text::MeCab                 0.20008   0.20008  D/DM/DMAKI/Text-MeCab-0.20008.tar.gz
Text::MeCab::Dict             undef     undef  D/DM/DMAKI/Text-MeCab-0.20010.tar.gz


サンプル1 ソース
#!/us/bin/perl

use strict;
use warnings;
use Text::MeCab;

my $STR = 'すもももももももものうち';
my $mecab = Text::MeCab->new;

for ( my $node = $mecab->parse($STR); $node; $node = $node->next ) {
    print $node->surface;
    print "   --->   ".$node->feature."\n";
}

サンプル1 結果
すもも  --->   名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も  --->   助詞,係助詞,*,*,*,*,も,モ,モ
もも  --->   名詞,一般,*,*,*,*,もも,モモ,モモ
も  --->   助詞,係助詞,*,*,*,*,も,モ,モ
もも  --->   名詞,一般,*,*,*,*,もも,モモ,モモ
の  --->   助詞,連体化,*,*,*,*,の,ノ,ノ
うち  --->   名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
Use of uninitialized value in print at mecab.pl line 11.
--->   BOS/EOS,*,*,*,*,*,*,*,*

動きましたが、最後の warning が 気になります。
ループの最後に入ってくるデータがおかしいようです。


サンプル2 ソース
#!/usr/bin/perl
                                            
use strict;
use warnings;
use Text::MeCab;

my $STR = 'すもももももももものうち';
my $mecab = Text::MeCab->new;

for ( my $node = $mecab->parse($STR); $node; $node = $node->next ) {
    if ($node->surface) {
        print $node->surface;
    }
    print "  --->   ".$node->feature."\n";
}

サンプル2 結果
すもも  --->   名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も  --->   助詞,係助詞,*,*,*,*,も,モ,モ
もも  --->   名詞,一般,*,*,*,*,もも,モモ,モモ
も  --->   助詞,係助詞,*,*,*,*,も,モ,モ
もも  --->   名詞,一般,*,*,*,*,もも,モモ,モモ
の  --->   助詞,連体化,*,*,*,*,の,ノ,ノ
うち  --->   名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
--->   BOS/EOS,*,*,*,*,*,*,*,*

.....もっと良い方法がありそうだけれど
ひとまず warning は 表示されなりました。



参考にさせて頂いたサイト

http://search.cpan.org/dist/Text-MeCab/
http://search.cpan.org/dist/Devel-CheckLib/
http://logic.stepserver.jp/data/archives/508.html
http://d.hatena.ne.jp/haroperi/20100725/1280073964
http://d.hatena.ne.jp/atree/20090512/1242122536

Comments for this entry

Leave your comment

 

Copyright 2010. All rights reserved.

RSS Feed. This blog is proudly powered by Blogger and uses Modern Clix, a theme by Rodrigo Galindez. Modern Clix blogger template by Introblogger.