読者です 読者をやめる 読者になる 読者になる

プログラマでありたい

おっさんになっても、プログラマでありつづけたい

cabochaでUTF8

自然言語処理

 昨日気づいたのですが、cabocha 0.60が開発中のようです。今は、pre2まで出ています。

変更点は、以下の通りのようです。何が嬉しいかというと、UTF8に対応しているところ。内部的には、ほぼフルスクラッチで書き直しの力作のようです。また、chasenのサポートをやめてmecabオンリーになっているので、mecabが必須になっています。

変更点:
- UTF8対応 (./configure --with-charset=UTF8)
- 文節区切りと固有表現抽出に CRF (実装はCRF++)を使用
- ChaSenへの依存を廃止し、MeCab のみのサポートに
- 固有表現を行う前に文字列の正規化を行うことで若干の精度向上
- 簡易並列処理の廃止。係り受けのみ
- APIの一新、より粒度の細かい制御が可能
- PerlやMakefileに依存していた部分の排除。
- 単一バイナリ cabocha-learn による学習の簡易化 (Windows でも学習が可能)
- TinySVMへの依存を排除。単体で学習可能
- Juman のサポートを復活。ただし、形態素解析は mecab-juman に限定
- 評価ツール caboca-system-eval の提供 


 早速、インストールしようとしたのですが、下記のようにエラーが出ました。

$ ./configure --with-charset=UTF8
略
$ make
make  all-recursive
Making all in src
/bin/sh ../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -DCABOCHA_DEFAULT_POSSET="\"IPA"\" -DCABOCHA_DEFAULT_CHARSET="\"UTF8"\" -DMODEL_VERSION=100  -DCABOCHA_DEFAULT_RC="\"/usr/local/etc/cabocharc\""    -O3 -Wno-deprecated -Wall -c -o chunk_learner.lo chunk_learner.cpp
mkdir .libs
 g++ -DHAVE_CONFIG_H -I. -I.. -DCABOCHA_DEFAULT_POSSET=\"IPA\" -DCABOCHA_DEFAULT_CHARSET=\"UTF8\" -DMODEL_VERSION=100 -DCABOCHA_DEFAULT_RC=\"/usr/local/etc/cabocharc\" -O3 -Wno-deprecated -Wall -c chunk_learner.cpp  -fno-common -DPIC -o .libs/chunk_learner.o
chunk_learner.cpp:1:19: error: crfpp.h: No such file or directory
chunk_learner.cpp: In function 'bool CaboCha::ChunkingTrainingWithCRFPP(CaboCha::ParserType, CaboCha::CharsetType, CaboCha::PossetType, int, const char*, const char*, const char*)':
chunk_learner.cpp:158: error: 'crfpp_learn' was not declared in this scope
make[2]: *** [chunk_learner.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

crfpp.hが無いと怒られています。調べてみると、CRF++に含まれているようです。

$wget http://kent.dl.sourceforge.net/sourceforge/crfpp/CRF++-0.51.tar.gz
$tar xzvf CRF++-0.51.tar.gz
$cd CRF++-0.51
$./configure
$make
$make install

この後に、cabochaのディレクトリに戻って、make; make install;で入ります。

$cabocha
北京五輪の柔道男子66キロ級が10日、行われ、アテネ金メダリストの内柴正人(30)(旭化成)が、決勝でバンジャマン・ダルベレ(仏)を破って優勝し、連覇を達成した。
 <LOCATION>北京</LOCATION>五輪の-D                              
                                     柔道男子-D                            
                                   66キロ級が---D                        
                            <DATE>10日</DATE>、-D                        
                                           行われ、-----------------------D
            <LOCATION>アテネ</LOCATION>金メダリストの-D                   |
                                                     内-------------------D
                                  <PERSON>柴正人</PERSON>-----------------D
                                                   (30)---------------D
                  (<ORGANIZATION>旭化成</ORGANIZATION>)が、-------------D
                                                         決勝で-------D   |
                                           バンジャマン・ダルベレ-----D   |
                                      (<LOCATION>仏</LOCATION>)を-D |   |
                                                               破って-D   |
                                                               優勝し、---D
                                                                   連覇を-D
                                                                 達成した。

macのコンソール、日本語フォントが読みにくいなぁ。。。