Text::MeCab

牧大輔さんがText::MeCabを作って公開しているのに今更ながら気が付きました。
http://search.cpan.org/~dmaki/Text-MeCab/
Text::KakasiMeCab版のようなものが欲しいなと思っていたのありがたく試させていただきました。

分かち書き処理をするだけの場合ってこれで良いかな。

#!/usr/bin/perl -w
use strict;
use Text::MeCab;

$/ = undef;
my $str = <STDIN>;

my @buf;
my $mecab = Text::MeCab->new({output_format_type => 'wakati'});
for (my $node = $mecab->parse($str); $node; $node = $node->next) {
     push(@buf, $node->surface);
}
my $tokenized = join(' ', @buf) . "\n";
print $tokenized;
exit 0;

特に問題なく動くのですが、速度が遅いです。書き方に問題があるのかなぁ?
同様にしてText::MeCabを使ったSpamAssassinMeCabプラグインを作ったらこれも何の問題もなく動きました。

mecab-perlを使うのをやめてText::MeCabを使いたいなぁと思うのですが、速度が遅いのが解決しないと難しいです。単に分かち書きをしたいだけなので、MeCab::Tagger->parse()のように一括して取り出せたらうれしいのですけど。私の力量ではXS関連はよくわからないです。修行しなければダメかしら。