Nana Sakisaka
n.sak****@gmail*****
2012年 11月 20日 (火) 05:56:16 JST
SVNからソースコードを落としてきてビルドしました。 確認ができました。対応ありがとうございます。 2012年11月20日 0:52 Taku Kudo <taku****@chase*****>: > 工藤です > > 報告ありがとうございます。 > > 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