Python の MeCab バインディング natto-py を使う

  • 20
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

natto-py とは?

natto-py は Python - MeCab の Foreign Function Interface (FFI) によるバインディングを提供する Python パッケージです。 Python 2 および 3 に対応し、コンパイラーが必要としない利点があります。*nix、OS X および Windows 上で利用可能です。

対応する Python バージョン

natto-py は下記の Python 2 および 3 を利用できます。下記のバージョンは実証済みです。

MeCab をインストール

まずは MeCab 0.996 をインストールします。

  • mecab-ipadic または mecab-jumandic のMeCab 用辞書も忘れずにインストールしましょう。
  • Windows なら、コンパイル済みの IPADIC 辞書が含まれています。
  • natto-py は mecab-config を通して libmecab.so (OS X の場合は libmecab.dylib)のインストール先を取得するので、必要に応じて mecab-config もインストールしておいてください。

natto-py をインストール

通常の Python パッケージと同様に pip 経由で natto-py インストールします。

$ pip install natto-py

cffi パッケージも必要ですが、上記のコマンドで cffi は必要に応じて自動的にインストールされます。

とりあえず使ってみよう

import 文

natto から MeCab クラスをインポートしてインスタンスを取得します。

from natto import MeCab

nm = MeCab()

print(nm)

<natto.mecab.MeCab model=<cdata 'mecab_model_t *' 0x802016640>,
    tagger=<cdata 'mecab_t *' 0x8020a44c0>, 
    lattice=<cdata 'mecab_lattice_t *' 0x802079600>, 
    libpath="/opt/mecab/lib/libmecab.so", 
    options={}, 
    dicts=[<natto.dictionary.DictionaryInfo 
        dictionary=<cdata 'mecab_dictionary_info_t *' 0x802079480>,
        filepath="/opt/mecab/lib/mecab/dic/ipadic/sys.dic", 
        charset=utf-8, 
        type=0>], 
 version=0.996>

解析を標準出力に

文をとりあえず解析して結果を文字列として標準出力に送ります。

text = "ピンチの時には必ずヒーローが現れる。"

print(nm.parse(text))

ピンチ   名詞,一般,*,*,*,*,ピンチ,ピンチ,ピンチ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
時 名詞,非自立,副詞可能,*,*,*,時,トキ,トキ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
必ず  副詞,助詞類接続,*,*,*,*,必ず,カナラズ,カナラズ
ヒーロー    名詞,一般,*,*,*,*,ヒーロー,ヒーロー,ヒーロー
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
現れる   動詞,自立,*,*,一段,基本形,現れる,アラワレル,アラワレル
。 記号,句点,*,*,*,*,。,。,。
EOS

MeCabNode 出力

解析結果を MeCabNode で取得して各形態素に関するより詳しい情報を出力します。

# -F / --node-format オプションでノードの出力フォーマットを指定する
#
# %m    ... 形態素の表層文
# %f[0] ... 品詞
# %h    ... 品詞 ID (IPADIC)
# %f[8] ... 発音
#  
with MeCab('-F%m,%f[0],%h,%f[8]') as nm:
    for n in nm.parse(text, as_nodes=True):
        print(n.feature)

ピンチ,名詞,38,ピンチ
の,助詞,24,ノ
時,名詞,66,トキ
に,助詞,13,ニ
は,助詞,16,ワ
必ず,副詞,35,カナラズ
ヒーロー,名詞,38,ヒーロー
が,助詞,13,ガ
現れる,動詞,31,アラワレル
。,記号,7,。
EOS

Python with 文を使用すれば、コンテキストが正常に終了しても例外が起きてもMeCab ライブラリーの参照が自動的に破棄されるので、勧めます。

以上

参考