MeCabのPerlバインディング

MeCabPerlバインディングに少々問題があります。

test3より

- MeCab-0.90rc10以降では次のようなエラーが出て、分かち書きが失敗する。
  TypeError in method 'Tagger_parse', argument 2 of type 'char const *'
  どうしてか?
  まだ、深く追いかけていないが、mecab-perlのMeCab_wrap.cxxが吐き出した
  エラーであるところまではわかった。

test4より

- バグの修正
-- MeCab-0.90rc10以降ではエラーが出ていた件を修正した。

test4では対処療法としてdecode_utf8を加えただけです。本来はこれを行わなくても問題ないはずなのですが。

sub tokenize {
  my $self = shift;
  my $text = shift;

  my $utf8 = Encode::decode_utf8($text);
  my $tokenized = $mecab->parse($utf8);
  return $tokenized;
}

一応、これで私の環境(Fedora Core 5/i386)ではエラーはでなくなりました。しかし、会社のサーバ(RHEL4 Update3/ppc)では相変わらずエラーが出ます。


MeCab本体の問題ではなく、MeCabPerlバインディングであるmecab-perlの問題であることがわかっています。一応、SWIGの仕様ということになっているらしく、回避策を検討しています。test4で行ったことも対処療法の一つではあったのですが、根本的な解決ではなく不完全であるため、問題が生じています。
だれかうまく回避できる方法があったら教えてください。


ダメダメな回避策として、mecab本体は最新版でもかまわないが「mecab-perlは0.90rc9を使え」というのものです。会社のサーバはこれで逃げています。

To Do

  • Message->new()に渡す引数としてconfは渡さずに、normalize_charsetを直接渡した方がよいのではないか? Message::Nodeへも同様に行い、内部的にはconfは一切使わないようにする。
  • normalize_charsetに関して脱設定オプション化を計る。(やたらめったらconf->{normalize_charset}を参照しまくっているのはやめる)
  • ベイズ前に一文字の文字はベイズ上は実質的にノイズなので除去する。