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