こちらの
http://d.hatena.ne.jp/t-tkzw/20060710/p1
ベンチで。黒死館殺人事件をDL、EUC-JPに変換してから実行。libmecab 0.92、20060707のipadicで。
daisuke@beefcake Text-MeCab$ time perl wakati-text-mecab.pl < kokushikan.euc.txt > /dev/nullreal 0m6.011s
user 0m3.127s
sys 0m1.108s
daisuke@beefcake Text-MeCab$
ふむ。まだちと遅い気もするが、マシンが違うのでちょっと比較のしようがないかも。ただ、まだ色々壊れたまま。
基本的な問題は、俺がText::MeCabのオブジェクト本体をDESTROYしたあとでもnodeは使いたい、と思ったのが問題だったようだ。そりゃdeep_node_copyしてたら遅くなるわな。ということで、デフォルトの動作をmecab-perlと一緒にしてみた。つまり
# mecab-perl
$mecab = MeCab::Tagger->new;
my $node = $mecab->parseToNode(...);
undef $mecab;$node->next; # err
になるけど、dclone()メソッドを使うとあら不思議、Text::MeCab::Nodeではなく、Text::MeCab::Node::Clonedを返すという仕様にする予定。
my $mecab = Text::MeCab->new;
my $node = $mecab->parse(...);my $clone = $node->dclone();
undef $mecab;$node->next; # err
$clone->next; # ok!
というところまでコミットしておいた。ただし、まだまだ壊れてます。
http://dev.razil.jp/svnweb/index.cgi/Text::MeCab/browse/trunk/