Taku Kudo
taku****@chase*****
2012年 11月 20日 (火) 00:52:17 JST
工藤です 報告ありがとうございます。 SWIG内で、以下のような workaround を追加してみました。外部エンコーディングにエンコードします。手元の環境では動いているようです。 #include "ruby/version.h" #if RUBY_API_VERSION_CODE >= 10900 #include "ruby/encoding.h" #define rb_str_new rb_external_str_new #endif レポジトリに反映していますので、一度試してみて下さい。 これで問題なければ次のバージョンにて反映いたします。 https://code.google.com/p/mecab/source/browse/#svn%2Ftrunk%2Fmecab%2Fruby 工藤 2012年11月19日 17:31 Nana Sakisaka <n.sak****@gmail*****>: > はじめまして。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 > > _______________________________________________ > Mecab-devel mailing list > Mecab****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/mecab-devel