mecab-python3 で適切な表層形を得る

2019年2月5日現在(実際には2018年11月頃から)、 pip でインストールする mecab-python3 は parseToNode() しようとすると表層系の取得がうまくできません。本記事ではこの現象の再現と対応方法を紹介します。

再現

❯❯❯ pip install mecab-python3
Collecting mecab-python3
 Using cached https://files.pythonhosted.org/packages/ac/48/295efe525df40cbc2173748eb869290e81a57e835bc41f6d3834fc5dad5f/mecab-python3-0.996.1.tar.gz
Installing collected packages: mecab-python3
 Running setup.py install for mecab-python3 ... done
Successfully installed mecab-python3-0.996.1

こんな感じで mecab-python3 をインストールします。なお、 MeCab 自体と辞書はインストール済みとします。
実際に parseToNode() を使って形態素解析し、表層形と辞書情報を表示するとこんな感じになります。

>>> import MeCab
>>> t = MeCab.Tagger()
>>> t.parse('')
'EOS\n'
>>> node = t.parseToNode('私の名前は中野です。')
>>> while node:
...   print(node.surface, node.feature)
...   node = node.next
...
私の名前は中野です。 BOS/EOS,*,*,*,*,*,*,*,*
私の名前は中野です。 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
の名前は中野です。 助詞,連体化,*,*,*,*,の,ノ,ノ
名前は中野です。 名詞,一般,*,*,*,*,名前,ナマエ,ナマエ
は中野です。 助詞,係助詞,*,*,*,*,は,ハ,ワ
中野です。 名詞,固有名詞,地域,一般,*,*,中野,ナカノ,ナカノ
です。 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
BOS/EOS,*,*,*,*,*,*,*,*

表層形(surface)の値がなんだかおかしいですね...。

対応

なぜか PyPI のコードが更新されていないので、上記の問題への修正が施された GitHub にあるものをインストールします。

❯❯❯ pip install git+https://github.com/SamuraiT/mecab-python3
Collecting git+https://github.com/SamuraiT/mecab-python3
 Cloning https://github.com/SamuraiT/mecab-python3 to /private/var/folders/b5/_k3chk_d3wb48bwqj2_r7mq80000gp/T/pip-req-build-ygufjw2h
Installing collected packages: mecab-python3
 Running setup.py install for mecab-python3 ... done
Successfully installed mecab-python3-0.996.2

先ほどと違い、 0.996.1 ではなく 0.996.2 がインストールされたことがわかります。
こちらで先ほどと同じコードを用いて試した結果、以下のようになります。

 BOS/EOS,*,*,*,*,*,*,*,*
私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
名前 名詞,一般,*,*,*,*,名前,ナマエ,ナマエ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
中野 名詞,固有名詞,地域,一般,*,*,中野,ナカノ,ナカノ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
BOS/EOS,*,*,*,*,*,*,*,*

こんな具合で意図通りの結果が得られます。良かった良かった。 PyPI 上の mecab-python3 も早く 0.996.2 になると良いですね。

この記事が気に入ったらサポートをしてみませんか?