PythonでMeCab + mecab-ipadic-neologdを使うまで

概要

MeCabをPythonから使う用事があったので、入れる手順をメモしておく。

mecabのバージョンは0.996。Pythonは3.5。Linuxで実行する想定。

@CretedDate 2016/08/04
@Versions python3.5, mecab0.996

MeCabの導入

mecabをダウンロードする

http://taku910.github.io/mecab/#download

解凍

$ tar xvf mecab-*.tar.gz

入る

$ cd mecab-*

MeCabをインストールする(気分的にHOMEの下に入れる。あとutf-8を指定しておく)

$ ./configure --prefix=$HOME/local --with-charset=utf8 --enable-utf8-only
$ make
$ make install

入れる場所を変えたので.bashrcあたりに下記を書いてパスを通しておく。

$ export PATH="$HOME/local/bin:$PATH"

IPA辞書をダウンロードする

http://taku910.github.io/mecab/#download

IPA辞書をインストールする(mecabをHOMEの下に入れたので、それに対応する場所にwith-dicdirを指定。あとnologdを使う際はutf-8必須)

$ tar xzvf mecab-ipadic-*.tar.gz
$ cd mecab-ipadic-*/
$ ./configure --with-charset=utf8 --with-dicdir=$HOME/local/lib/mecab/dic/ipadic
$ make
$ make install

mecab-neologdを落とす。depth 1を指定した方が落とす量が減って良い。

$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
インストールする(HOME配下にmecabや辞書を入れてる場合は-uする)
$ cd mecab-ipadic-neologd/
$ bin/install-mecab-ipadic-neologd -n -u

インストールパスを指定したい場合は下記のように記述。

$ bin/install-mecab-ipadic-neologd -n -u --prefix $HOME/local/lib/mecab/dic/mecab-ipadic-neologd

これで mecabインストールパス配下の lib/mecab/dic/mecab-ipadic-neologd に辞書が入ったので、--dicdirで辞書指定すれば利用可能。

$ echo "志村けん" | mecab
志村    名詞,固有名詞,人名,姓,*,*,志村,シムラ,シムラ
けん    動詞,自立,*,*,五段・ラ行,体言接続特殊,ける,ケン,ケン
EOS

$ echo "志村けん" | mecab --dicdir ~/local/lib/mecab/dic/mecab-ipadic-neologd
志村けん 名詞,固有名詞,人名,一般,*,*,志村けん,シムラケン,シムラケン
EOS

デフォルトの辞書をneologdに変える場合は、mecabインストールパス配下の etc/mecabrc を編集して dicdir に mecab-ipadic-neologd のパスを指定する。

mecab-python3の導入

今回はPython3を利用しているので、mecab-python3を入れる。

$ pip install mecab-python3

簡単な形態素解析のコードを動かしてみる。

import MeCab

# parse
MeCab.Tagger().parse('形態素解析した結果')
  #=> '形態素解析\t名詞,固有名詞,一般,*,*,*,形態素解析,ケイタイソカイセキ,ケイタイソカイセキ\nし\t動詞,自立,*,*,サ変・スル,連用形,する,シ,シ\nた\t助動詞,*,*,*,特殊・タ,基本形,た,タ,タ\n結果\t名詞,副詞可能,*,*,*,*,結果,ケッカ,ケッカ\nEOS\n'

# parseToNode
tagger = MeCab.Tagger('-Ochasen')
tagger.parse('')
node = tagger.parseToNode('形態素解析した結果')
while node:
  print(node.surface)
  node = node.next

下記のようなエラーが出ることがある。

ImportError: libmecab.so.2: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません

その場合は、mecabをインストールしたパス配下のlibディレクトリをLD_LIBRARY_PATHに入れる記述を実行するなり.bashrcに入れるなりする。

$ export LD_LIBRARY_PATH=$HOME/local/lib