Text::MeCabとUTF-8
UTF-8 でセットアップした MeCab を Text::Mecab から使ってみたが、feature のマッチがうまくいかない。
調べてみると、文字列に utf8 フラグが立っていなかった。MeCab 自体のエンコーディングがいろいろだから、ネイティブ文字列に変換するよりもオクテット列で持っておこうということかもしれない。
Encode::decode_utf8() で変換する。
use utf8; use Text::MeCab; use Encode qw(decode_utf8); my $mecab = Text::MeCab->new(); my $node = $mecab->parse("オープンソース形態素解析エンジン"); for(; $node; $node = $node->next) { my $feature = decode_utf8($node->feature); my $surface = defined($node->surface) ? decode_utf8($node->surface) : undef; # ... }
ちゃんと変換するには Text::MeCab::ENCODING からエンコーディングを取得して decode() する。