ページへ戻る

− Links

 印刷 

自然言語解析​/MeCabをpythonで使う のバックアップソース(No.2) :: NJF Wiki

xpwiki:自然言語解析/MeCabをpythonで使う のバックアップソース(No.2)

« Prev[5]  Next »[6]
*MeCabのインストール [#ned074dc]

MeCabは日本語の文章を単語に分解してそれぞれの品詞や活用形を表示してくれる形態素解析のソフト。
[[MeCabについて詳しくはこちらを参考のこと。:http://taku910.github.io/mecab/]]

自然言語解析をするならとりあえず入れておいた方が良い。

インストルールは上記サイトにもあるが、最新ソースをダウンロードしてきて、本体は

 tar zxfv mecab-X.X.tar.gz
 cd mecab-X.X
 ./configure --enable-utf8-only
 make
 make check
 sudo make install

辞書は

 tar zxfv mecab-ipadic-2.7.0-xxxx
 cd mecab-ipadic-2.7.0-xxxx
 ./configure  --with-charset=utf8
 make
 make check
 sudo make install

とする。ここで文字コードをutf8に固定している。しなくても良いのだが、utf8が最近はいろいろなテキストのデファクトスタンダードなコードになりつつあるので、固定しておいて入力データを変換した方がMeCabで見分けて解析するより何かと楽なのでそうしている。

インストールがうまくいっていれば、

 mecab -v

でバージョンが表示される。

実際にテストで解析したければ、標準入力などでテキストを与える。

 $ echo "庭には二羽鶏がいる" | mecab
 庭	名詞,一般,*,*,*,*,庭,ニワ,ニワ
 に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
 は	助詞,係助詞,*,*,*,*,は,ハ,ワ
 二	名詞,数,*,*,*,*,二,ニ,ニ
 羽	名詞,接尾,助数詞,*,*,*,羽,ワ,ワ
 鶏	名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ
 が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
 いる	動詞,自立,*,*,一段,基本形,いる,イル,イル
 EOS

*pythonのMeCabバインディングのインストール [#v0090cc9]
MeCabには各種スクリプト言語 (perl, ruby, python, Java) から使うためのバインディングがある。
ここでpythonを選んだのは、世界的には最も普及したスクリプト言語であり、各種のライブラリや(日本語にこだわらなければ)たくさんの資料があるため。

pythonのMeCabバインディングのインストールは

 sudo pip install mecab-python

とすればよい。

pythonからの使い方は
 import MeCab
 meCabTagger= MeCab.Tagger("mecabrc")
 res = meCabTagger.parseToNode("庭には二羽鶏がいる")
 while res:
      print res.surface
      print res.feature
      res = res.next

結果は

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

 BOS/EOS,*,*,*,*,*,*,*,*

つまり、「surface」にもとの単語が入り、「feature」に品詞や活用などがコンマ区切りのCSVのテキストで入っている。

featureは、「品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音」と入っている。
品詞細分類については[[形態素解析ツールの品詞体系:http://www.unixuser.org/~euske/doc/postag/]]を参照のこと。



ここでMeCabへの入力はstr型で無くてはならない。

 >>> res = meCabTagger.parseToNode(u"庭には二羽鶏がいる")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/Library/Python/2.7/site-packages/MeCab.py", line 282, in parseToNode
     def parseToNode(self, *args): return _MeCab.Tagger_parseToNode(self, *args)
 TypeError: in method 'Tagger_parseToNode', argument 2 of type 'char const *'

« Prev[5]  Next »[6]