ページへ戻る

− Links

 印刷 

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

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

« 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

*辞書の更新 [#j6833905]

残念ながらデフォルトのままでは辞書の単語数が少なすぎて、あまり正確に解析できない。
自分でも単語を追加できるが、精度をあげるには相当数を追加する必要があり、ちょっと難しい。
幸いこちら([[http://diary.overlasting.net/2015-03-13-1.html]])で新語などを追加している方がいるので、ありがたく使わせていただく。
辞書のインストールと使い方はリンク先参照のこと。

この辞書を使うと例えば

 echo "レアチーズケーキ" | mecab

 レアチーズケーキ	名詞,固有名詞,組織,*,*,*,*
 EOS

と、なぜかレアチーズケーキが組織名になっていたのが、

 echo "レアチーズケーキ" | mecab  -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/

 レアチーズケーキ	名詞,固有名詞,一般,*,*,*,レアチーズケーキ,レアチーズケーキ,レアチーズケーキ
 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 *'


Mecabの初期化ではオプションを使える。つまり例えば他の辞書を使いたければ、

 mecabTagger = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/")

とする。


« Prev[5]  Next »[6]