Nana Sakisaka
n.sak****@gmail*****
2012年 11月 19日 (月) 17:31:09 JST
はじめまして。saki7と申します。 MeCabのRubyバインディングで、文字のエンコーディングが適切に設定されないバグがあるようです。 以下のようなコードが通りません。 > features = node.feature.split(',') > features[0] == '名詞' # 両方とも '名詞' なのに、比較の結果がtrueにならない! これはRubyのStringが1.9からエンコーディング情報を持つことになったためで、 この場合、 - mecab-rubyが返す文字列のエンコーディングが'ASCII-8bit' なのに対して - ソースコードのエンコーディングが 'UTF-8' なため文字列比較がうまく行きません。 しかし、通常Ruby1.9における文字コードは Encoding.default_external 等で定義されているはずであり、 mecab-ruby側でも、現在の仕様のように 'ASCII-8bit' 決め打ちなのではなく、 環境のエンコーディングに応じて適切な文字コードで返すべきなのではないでしょうか。 以上を疑問に思い、MLで質問させて頂きました。 当方の環境は以下の通りです。 - Ubuntu Linux 12.04 - $LANG: ja_JP.UTF-8 - ロケール: ja_JP.UTF-8 - mecab-0.994 (--enable-utf8-only でビルド) - mecab-ruby-0.994 - Encoding.default_external = Encoding::UTF_8 - Encoding.default_internal = Encoding::UTF_8 mecab-rubyのソース中でSWIGを使った部分で rb_str_new2() 関数を使っているのが 直接の問題であると思います。 以下のURLも御参照下さい。 [open technica: MacにMeCab + Rubyバインディングインストール] ttp://opentechnica.blogspot.jp/2012/02/macmecab-ruby.html [MeCabで品詞の比較ができない - QA @ IT] ttp://qa.atmarkit.co.jp/q/34