焼きサンマ綺麗に食べるブログ

焼きサンマ食べたい

Utf-8環境下でのText::MeCabの挙動について

新しい環境下でText::MeCabがちゃんと動くかどうか確かめている最中におかしな結果になっていた。

下記のPerlトを動かした。実はUtf-8で書いたときに、外部プログラムから戻ってきた文字列にutf-8フラグが立っているかどうか確かめたかったのでその処理も書いてある。(本来確かめたかったのはそっち)

#!/usr/local/bin/perl

use strict;
use warnings;
use Encode;
use encoding 'utf8';
binmode(STDERR, ":utf8");
use utf8;
use Text::MeCab qw(:all);
use MeCab;

my $mecab = Text::MeCab->new;

my $node = $mecab->parse("太郎とわたしで散歩する");

for ($node = $node->next ; $node->next; $node = $node->next) {
    my $surface = $node->surface;
    my $feature = $node->feature;

    utf8::decode($surface);
    utf8::decode($feature);
    print "$surface\t$feature\t", utf8::is_utf8($surface), utf8::is_utf8($feature), "\n";
}

$mecab = new MeCab::Tagger ("");
$node = $mecab->parseToNode("太郎とわたしで散歩する");

$node = $node->{next};
while ($node->{next}) {
    my $surface = $node->{surface};
    my $feature = $node->{feature};

    utf8::decode($surface);
    utf8::decode($feature);
    print "$surface\t$feature\t", utf8::is_utf8($surface), utf8::is_utf8($feature), "\n";

    $node = $node->{next};
}

このスクリプトを動かした結果以下のようになった。

太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー    11
と      助詞,並立助詞,*,*,*,*,と,ト,ト0  11
わたし  名詞,代名詞,一般,*,*,*,わたし,ワタシ,ワタシ     11
で      助詞,格助詞,一般,*,*,*,で,デ,デ 11
散歩    名詞,サ変接続,*,*,*,*,散歩,サンポ,サンポ5]@     11
する    11詞,自立,*,*,サ変・スル,基本形,する,スル,スル P
太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー    11
と      助詞,並立助詞,*,*,*,*,と,ト,ト  11
わたし  名詞,代名詞,一般,*,*,*,わたし,ワタシ,ワタシ     11
で      助詞,格助詞,一般,*,*,*,で,デ,デ 11
散歩    名詞,サ変接続,*,*,*,*,散歩,サンポ,サンポ        11
する    動詞,自立,*,*,サ変・スル,基本形,する,スル,スル  11

このように、結果の上半分でfeatureを表示している部分にゴミが付いている。
これはなんなんだろうなぁ。わかるひとがいたら教えてほしいです。
Perlスクリプトの添削もしてくださると助かります。)