MeCabとCaboChaをpythonから呼び出せるようにする(ubuntu, centos)

日本語で自然言語処理をする上で必須となる形態素解析、それから係り受け解析のエンジンである
MeCabとCaboChaをpythonから呼び出せるようにする。

動作確認はUbuntu 14.04.3 LTSとCentOS Linux release 7.2.1511で行いました。

1.Mecab
1.1 Ubuntu 14.04.3でMeCab環境構築
//ubuntupython-mecabのインストール
$ sudo aptitude install python-nltk python-numpy python-matplotlib python-networkx prover9
$ sudo apt-get install mecab libmecab-dev mecab-ipadic
$ sudo aptitude install mecab-ipadic-utf8
$ sudo apt-get install python-mecab

//動作確認
$ python

# coding: utf-8
import sys
import MeCab

m = MeCab.Tagger ("-Ochasen")
print ("私の名前はボブです。")
print m.parse("私の名前はボブです。")

1.2 CentOS 7.2でMeCab環境構築
mecabのインストール
$ cd /var/tmp
$ curl -O https://mecab.googlecode.com/files/mecab-0.996.tar.gz
$ tar zxfv mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure
$ make
$ sudo make install

○辞書(ipadict)インストール
$ cd /var/tmp
$ curl -O https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8
$ make
$ sudo make install

pythonからmecabを使えるようにする
$ yum groupinstall -y 'development tools'
$ yum install python-devel
$ pyenv install anaconda2-2.4.1
$ pyenv global anaconda2-2.4.1
$ vi /etc/ld.so.conf #共有ライブラリにパスを通す

include ld.so.conf.d/*.conf
/usr/local/lib

$ curl -O https://mecab.googlecode.com/files/mecab-python-0.996.tar.gz
$ tar zxfv mecab-python-0.996.tar.gz
$ cd mecab-python-0.996
$ vi setup.py #cmd2("~の部分を絶対パスに変える

#!/usr/bin/env python

from distutils.core import setup,Extension,os
import string

def cmd1(str):
return os.popen(str).readlines()[0][:-1]

def cmd2(str):
return string.split (cmd1(str))

setup(name = "mecab-python",
#version = cmd1("mecab-config --version"),
version = cmd1("/usr/local/bin/mecab-config --version"),
py_modules=["MeCab"],
ext_modules = [
Extension("_MeCab",
["MeCab_wrap.cxx",],
#include_dirs=cmd2("mecab-config --inc-dir"),
include_dirs=[r"/usr/local/bin/mecab-config --inc-dir"],
#library_dirs=cmd2("mecab-config --libs-only-L"),
library_dirs=[r"/usr/local/bin/mecab-config --libs-only-L"],
#libraries=cmd2("mecab-config --libs-only-l"))
libraries=["libmecab"])
])

$ python setup.py build
$ sudo python setup.py install

//動作確認
python

# coding: utf-8
import sys
import MeCab

mecab = MeCab.Tagger ("-Ochasen")

print ("私の名前はボブです。")
print mecab.parse("私の名前はボブです。")

sent = u"かれのくるまでまつ".encode('utf-8')
print mecab.parse(sent)

node = mecab.parseToNode(sent)
node = node.next
while node:
print node.surface, node.feature
node = node.next


2.CaboCha
2.1 Ubuntu 14.04.3でCaboCha環境構築
//ubuntuにcabochaを入れてpythonから使う
$ sudo apt-get install mecab libmecab-dev mecab-utils mecab-ipadic-utf8
$ sudo apt-get install build-essential
$ tar zxvf CRF++-0.58.tar.gz
$ cd CRF++-0.58
$ ./configure
$ make
$ sudo make install

$ vi /etc/ld.so.conf

include /etc/ld.so.conf.d/*.conf
include /usr/local/lib

$ sudo ldconfig


cabocha-0.68.tar.bz2をサーバにアップロードしておく
$ bzip2 -dc cabocha-0.68.tar.bz2 | tar xvf -
$ cd cabocha-0.68
$ ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8
$ make
$ make check
$ sudo make install
$ cd python
$ sudo apt-get install python-dev
$ python setup.py build
$ sudo python setup.py install


pythonでcabochaをつかってみる
python

import CaboCha
cabocha = CaboCha.Parser('--charset=UTF8')
sent = u"太郎はこの本を二郎を見た女性に渡した。".encode('utf-8')
print cabocha.parseToString(sent)
tree = cabocha.parse(sent)
print tree.toString(CaboCha.FORMAT_LATTICE)
print tree.toString(CaboCha.FORMAT_XML)

2.2 CentOS 7.2でCaboCha環境構築
//CentOsにcabochaを入れてpythonから使う
○crf++のインストール(事前にファイルをあげておく)
$ tar xzf CRF++-0.58.tar.gz
$ cd CRF++-0.58
$ ./configure
$ make
$ su
# make install

○cabochaのインストール(事前にファイルをあげておく)
$ bzip2 -dc cabocha-0.66.tar.bz2 | tar xvf -
$ cd cabocha-0.66
$ ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8
$ make
$ make check
$ su
# make install
pythonからCaboChaを使えるようにする
$ cd python
$ python setup.py build
$ python setup.py install
$ ldconfig

//動作確認
$ python

import CaboCha
cabocha = CaboCha.Parser('--charset=UTF8')
sent = u"太郎はこの本を二郎を見た女性に渡した。".encode('utf-8')
print cabocha.parseToString(sent)
tree = cabocha.parse(sent)
print tree.toString(CaboCha.FORMAT_LATTICE)
print tree.toString(CaboCha.FORMAT_XML)

for i in range(tree.chunk_size()):
chunk = tree.chunk(i)
print 'Chunk:', i
print ' Score:', chunk.score
print ' Link:', chunk.link
print ' Size:', chunk.token_size
print ' Pos:', chunk.token_pos
print ' Head:', chunk.head_pos # 主辞
print ' Func:', chunk.func_pos # 機能語
print ' Features:',
for j in range(chunk.feature_list_size):
print ' ' + chunk.feature_list(j)
print
print 'Text'
for ix in range(chunk.token_pos,chunk.token_pos + chunk.token_size):
print ' ', tree.token(ix).surface
print

for i in range(tree.token_size()):
token = tree.token(i)
print 'Surface:', token.surface
print ' Normalized:', token.normalized_surface
print ' Feature:', token.feature
print ' NE:', token.ne # 固有表現
print ' Info:', token.additional_info
print ' Chunk:', token.chunk
print