動かざることバグの如し

3分経てば忘れそうなことをメモします

Python3環境でMecabを動かす

環境

そもそもMecabが入ってなかったら以下でインストールする

thr3a.hatenablog.com

echo おはよう|mecabで表示されればOK

pythonMecabを使えるように

pip install mecab-python3

サンプル

# coding: utf-8
import MeCab
 
text = '庭には二羽鶏がいる。'
mecab = MeCab.Tagger('mecabrc')
mecab.parse('')

node = mecab.parseToNode(text)
while node:
    print(node.surface, node.feature)
    node = node.next

結果

 BOS/EOS,*,*,*,*,*,*,*,*
庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
二 名詞,数,*,*,*,*,二,ニ,ニ
羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ
鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
いる 動詞,自立,*,*,一段,基本形,いる,イル,イル
。 記号,句点,*,*,*,*,。,。,。
 BOS/EOS,*,*,*,*,*,*,*,*

mecab.parse(‘’)の謎

先程のコードで mecab.parse('')の空パースをせずにいきなり文章を投げるとエラーになる事がある。

 BOS/EOS,*,*,*,*,*,*,*,*
.7 名詞,一般,*,*,*,*,庭,ニワ,ニワ
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-47-6ae1b4dc3c53> in <module>()
      8 node = mecab.parseToNode(text)
      9 while node:
---> 10     print(node.surface, node.feature)
     11     node = node.next

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

バグ?っぽいので現状読み込み時の最初に空パースするのが安全だと思う