読者です 読者をやめる 読者になる 読者になる

【MeCab】Python3で解析時にbuiltins.UnicodeDecodeError【Flask】

Twitterから取得したデータをMeCabで処理し、Flaskを用いたWebアプリケーション上で表示しようとしたところ、下記のようなエラーが出現。

builtins.UnicodeDecodeError
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 0: invalid start byte

もしかしたらまたハマるかもしれないので念のためメモ。

環境

Python 3.4.3
MeCab 0.996

解決策

原因は不明だが、エラーメッセージを見るにエンコーディングがどうので死んでしまう模様。
ちなみにMeCabの実装コードは下記のような感じ。

import MeCab
mecab = MeCab.Tagger()
node = mecab.parseToNode("私はルイズが好きです。なぜなら、彼女はとてもキュートだからです。")
while node:
    print(node.surface)
    node = node.next

中々解決策に辿りつけなかったのだが、一行追記することでエラーの回避が可能に。
原因は正直良くわからない。
修正したコードは以下。

import MeCab
mecab = MeCab.Tagger()
mecab.parse('')  # これを追記!
node = mecab.parseToNode("私はルイズが大好きです。なぜなら、彼女はとてもとてもキュートだからです。ルイズかわいい!")
while node:
    print(node.surface)
    node = node.next

元々Python3でMeCabparseToNodeメソッドを使用すると、最初に返されるnodeが空の値というバグがあり、この解決のためにmecab.parse('')をするらしいのだが、UnicodeDecodeErrorへも対策として効果を発揮してくれた。

原因はよく分からないが、動くようになったので取り敢えず良しとする。

参考

Ubuntu14.04とPython3でMeCabを使う方法 | トライフィールズ