LoginSignup
27
22

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-02

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 ライブラリーの参照が自動的に破棄されるので、勧めます。

以上

参考

27
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
22