目的
Cabocha0.68をインストールしてPythonで係受け解析を行う
前提
Mecabをインストールしてあること
https://code.google.com/p/mecab/downloads/list
ここではmecab-0.996.exeをUTF-8でインストールしてあるものとする。
Cabochaのインストール
1.cabocha-0.68.exeのダウンロード
http://code.google.com/p/cabocha/downloads/list
2.ダウンロードしたEXEの実行。この際、選択する文字コードはMecabの文字コードと同一にする。
※ここではUTF-8を選択
3.環境変数のパスに”C:\Program Files (x86)\CaboCha\bin”を通してcabochaを実行できるようにしておく
れはpythonがdllにアクセスするのにも必要である。
4.実行確認を行う
input.txtというUTF8のファイルを作成して解析したい文字列を入力して、コマンドプロンプトから下記を実行する。
cabocha < input.txt > out.txt
適切に解析できれば下記のようなファイルが出力される。
ここは---D
まりさの-D
ゆっくりプレイスだよ!
EOS
なおここでファイルを経由しているのはコマンドプロンプトでUTF-8を扱えないためである。
ここはまりさのゆっくりプレイスだよ!
EOS
こうなってしまった場合、input.txtの文字コードがutf-8になっていない場合がある。
(メモ帳で作成した場合、デフォルトがANSIなので注意)
また、以下のようなエラーが発生する場合がある。
svm.cpp(140) [version == MODEL_VERSION] incompatible version: 101
svm.cpp(751) [size >= 2] dep.cpp(79) [!failed] no such file or directory: C:\Program Files (x86)\CaboCha\etc\..\model\dep.ipa.model
この場合は、cabochaのバージョンアップが適切に行えていないので、下記のフォルダを削除すること。
C:\Users\ユーザ名\AppData\Local\VirtualStore\Program Files(x86)\CaboCha
PythonからCabochaを使用できるようにする。
1.cabocha-0.68.tar.bzのダウンロード
http://code.google.com/p/cabocha/downloads/list
このファイルはLhaplusなどで解凍できる
2.解凍したフォルダ中のpythonフォルダにカレントディレクトリを移動させて下記のコマンドを実行する。
python setup.py install
3.以下のエラーが発生する。
Traceback (most recent call last):
File "setup.py", line 13, in <module>
version = cmd1("cabocha-config --version"),
File "setup.py", line 7, in cmd1
return os.popen(str).readlines()[0][:-1]
IndexError: list index out of range
これは、Windowsにはcabocha-configがインストールされていないために発生する
4.setup.pyを変更する。
変更前
# !/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 = "cabocha-python",
version = cmd1("cabocha-config --version"),
py_modules=["CaboCha"],
ext_modules = [
Extension("_CaboCha",
["CaboCha_wrap.cxx",],
include_dirs=cmd2("cabocha-config --inc-dir"),
library_dirs=cmd2("cabocha-config --libs-only-L"),
libraries=cmd2("cabocha-config --libs-only-l"))
])
version と、ext_modulesの内容をインストールした情報に書き換える。
変更後
# !/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 = "cabocha-python",
version = "0.68",
py_modules=["CaboCha"],
ext_modules = [
Extension("_CaboCha",
["CaboCha_wrap.cxx",],
include_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
library_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
libraries=['libcabocha'])
])
5.再度、setup.pyの実行
python setup.py install
6.以下のサンプルプログラムを入力して試す。
# !/usr/bin/python
# -*- coding: utf-8 -*-
import CaboCha
# c = CaboCha.Parser("");
c = CaboCha.Parser("")
sentence = "帽子を返す"
# print c.parseToString(sentence)
# tree = c.parse(sentence)
#
tree = c.parse(sentence)
print tree.toString(CaboCha.FORMAT_TREE)
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
帽子を-D
返す
EOS
* 0 1D 0/1 0.000000
帽子 名詞,一般,*,*,*,*,帽子,ボウシ,ボーシ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 1 -1D 0/0 0.000000
返す 動詞,自立,*,*,五段・サ行,基本形,返す,カエス,カエス
EOS
Chunk: 0
Score: 0.0
Link: 1
Size: 2
Pos: 0
Head: 0
Func: 1
Features: FCASE:を
FHS:帽子
FHP0:名詞
FHP1:一般
FFS:を
FFP0:助詞
FFP1:格助詞
FFP2:一般
FLS:帽子
FLP0:名詞
FLP1:一般
FRS:を
FRP0:助詞
FRP1:格助詞
FRP2:一般
LF:を
RL:帽子
RH:帽子
RF:を
FBOS:1
GCASE:を
A:を
Text
帽子
を
Chunk: 1
Score: 0.0
Link: -1
Size: 1
Pos: 2
Head: 0
Func: 0
Features: FHS:返す
FHP0:動詞
FHP1:自立
FHF:基本形
FFS:返す
FFP0:動詞
FFP1:自立
FFF:基本形
FLS:返す
FLP0:動詞
FLP1:自立
FLF:基本形
FRS:返す
FRP0:動詞
FRP1:自立
FRF:基本形
LF:返す
RL:返す
RH:返す
RF:返す
FEOS:1
A:基本形
Text
返す
Surface: 帽子
Normalized: 帽子
Feature: 名詞,一般,*,*,*,*,帽子,ボウシ,ボーシ
NE: None
Info: None
Chunk: <CaboCha.Chunk; proxy of <Swig Object of type 'CaboCha::Chunk *' at 0x0274A170> >
Surface: を
Normalized: を
Feature: 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
NE: None
Info: None
Chunk: None
Surface: 返す
Normalized: 返す
Feature: 動詞,自立,*,*,五段・サ行,基本形,返す,カエス,カエス
NE: None
Info: None
Chunk: <CaboCha.Chunk; proxy of <Swig Object of type 'CaboCha::Chunk *' at 0x0274A170> >