QA@IT

MeCabで品詞の比較ができない

3120 PV

MeCabで解析した結果から名詞だけ抽出したいのですが、

# -*- coding: utf-8 -*-
require 'MeCab'
mecab = MeCab::Tagger.new()
node = mecab.parseToNode("MeCabで品詞の比較ができない")
while node do
    f = node.feature.split(',')
    if f[0] == "名詞"
        puts node.surface
    end
    node = node.next
end

上記のif文がtrueになりません。

node.feature.encodingがASCII-8BITになっているので、

f = node.feature.force_encoding('UTF-8').split(',')

で解決しましたが、インストールに問題あるのでしょうか?

rubyは1.9.2、mecabは0.993です。

回答

インストールの問題ではなく、MeCabuのRubyバインディングが、バインディング内で結果の文字列を生成する際にrb_str_new()を使用しているからではないかと思います。

rb_str_new()で文字列を生成した際は、ASCII-8BITになるようです。
ですので、挙動としては問題ないと思います。

C拡張内でエンコーディングを明示する際は、rb_enc_str_new()を使用します。

こちらを参考にしてみてください。
http://yugui.jp/articles/838

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。