Python
mecab

PythonからMeCab(とCaboCha)を使うまで

More than 1 year has passed since last update.

環境

Mac OS 10.9.4
Python 2.7

Cabochaのインストール

CaboChaを使うのにはMeCabが必要

CRF++のインストール

執筆時での最新版は 0.58
http://crfpp.googlecode.com/svn/trunk/doc/index.html#download

解凍して

$ cd CRF++-0.58
$ ./configure
$ make
$ make install

$ cd python
$ sudo python setup.py install

MeCabのインストール

執筆時での最新版は 0.996
https://code.google.com/p/mecab/

Downloadsから

  • mecab-0.996.tar.gz(mecab本体)
  • mecab-python-0.996.tar.gz
  • mecab-ipadic-2.7.0-20070801(辞書らしい)

をダウンロード,解凍.

$ cd mecab-0.996
$ ./configure
$ make
$ sudo make install

$ cd ..
$ cd mecab-python-0.996
$ sudo python setup.py install

$ cd ..
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure
$ make
$ sudo make install

Python.h: そのようなファイルやディレクトリはありません
とか言われた場合は
sudo apt-get install python2.7-dev

動かしてみる

$ mecab
坂本ですが
坂本? ????,????,*,*,*,*,*
??  ̾??,??ͭ̾??,?ȿ?,*,*,*,*
??が   ????,????,*,*,*,*,*
EOS

文字化けしている.辞書の文字コードがデフォルトだとutf-8じゃないらしい.

mecab-ipadicのディレクトリに移動して,UTF-8にでコンフィグしなおしてみる.
make cleanしてからconfigureしなおすようにする

$ make clean
$ ./configure --with-charset=utf8
$ make 
$ sudo make install

Ubuntuとかで
libmecab.so.2: cannot open shared object file: No such file or directory
とか言われたら、
sudo ldconfig
とすればいいっぽい

使ってみる.

$ mecab
坂本ですが
坂本  名詞,固有名詞,人名,姓,*,*,坂本,サカモト,サカモト
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
が 助詞,接続助詞,*,*,*,*,が,ガ,ガ
EOS

直った.

ちなみに,mecabの設定はmecabrcに書いてある.

$ sudo find / -name "mecabrc"
/usr/local/etc/mecabrc
$ sudo emacs /usr/local/etc/mecabrc

デフォルトだとこんな感じになっていた

;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir =  /usr/local/lib/mecab/dic/ipadic

; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

dicdirってのが辞書データのディレクトリらしい.

CaboCha のインストール

執筆時の最新版は 0.68
https://code.google.com/p/cabocha/

Downloadsからcabocha-0.68.tar.bz2をダウンロード,解凍して

$ cd cabocha-0.68
$ ./configure
$ make
$ sudo make install

$ cd pythin
$ sudo python setup.py install

MeCabで形態素解析してみる

pythonでの動作確認

import MeCab
mt = MeCab.Tagger("-Ochasen")
print mt.parse("坂本ですが")
坂本  サカモト    坂本  名詞-固有名詞-人名-姓      
です  デス  です  助動詞   特殊・デス 基本形
が ガ が 助詞-接続助詞     
EOS

品詞とか見る

なんか文字コードとかかなり気をつけないと行けないようでめんどうである.

# coding: utf-8
import MeCab

mt = MeCab.Tagger("mecabrc")
res = mt.parseToNode("坂本ですが")

while res:
    print res.surface
    print res.feature
    res = res.next
BOS/EOS,*,*,*,*,*,*,*,*
坂本
名詞,固有名詞,人名,姓,*,*,坂本,サカモト,サカモト
です
助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
が
助詞,接続助詞,*,*,*,*,が,ガ,ガ

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

res.featureを","でsplitしてる実装が多かったけどそうるすしかないのかしら.まあ問題なさそうなのでそうしてみる.

# coding: utf-8
import MeCab

mt = MeCab.Tagger("mecabrc")
res = mt.parseToNode("坂本ですが")

while res:
    print res.surface
    arr = res.feature.split(",")
    print "品詞: " + arr[0]
    res = res.next
品詞: BOS/EOS
坂本
品詞: 名詞
です
品詞: 助動詞
が
品詞: 助詞

品詞: BOS/EOS

res.next じゃなくて res = res.next ってしないと当然無限ループする。Javaとか使ってるとハマる。

CaboChaを使ってみる

のを使ってみたらまた書きます.