気の向くままに辿るIT/ICT
ソフトウェア

構文解析ライブラリCaboCha

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

構文解析ライブラリCaboCha

構文解析ライブラリCaboCha

2021/11/15

 CaboChaは、SVMs/Support Vector Machines に基づく日本語係り受け解析器とのことで現時点では、C/C++/Perl/Rubyライブラリがあり、MeCab同様、奈良先端科学技術大学院大学ならびに工藤 拓氏、また、松本 裕治が、現在は、前者が開発者のよう?です。

 PC−UNIX/*BSD/Linux系、よっておそらくmacOSでも、また、Windowsについてもインストール方法や利用サンプルなどはリンク先にある通りです。

 ここでは、Debian GNU/Linuxを使います。

 が、CRF++(CRFs/Conditional Random Fields/条件付き確率場(シーケンシャルデータの分割・ラベリング用)で汎用的に使えることを意図したオープンソース実装)についてはリンク切れになっているようなので同氏のCRF++公式ドキュメントらしきhttps://taku910.github.io/crfpp/にあるGoogleドライブからダウンロードします。

 CRF++もCaboChaも、なぜか、Google Driveが、これでもかって言うほど、抵抗して、ごねまくって苦戦します。

 が、ファイルを選択、ポップアップのファイルをクリックしたり、ダウンロードアイコンをクリックしたり、これを何度も繰り返したり、あれこれやってみて悪戦苦闘していると、そのうち新たなタブが表示され、見慣れたアプリで開くか、ダウンロードするかを選択実行するポップアップが表示されるので胸をなでおろしつつ、ダウンロードします。

 CaboChaのインストールに伴い、前提としてCRF++の他、MeCabも必要となっているのは、なんでかと思ったら、普通のテキスト文字列をCaboChaに渡すことができ、この際に内部で形態素解析するためにMeCabを利用するということのようです。

CaboCha

debian~:$ python -V
Python 3.9.2
debian~:$ mecab -v
mecab of 0.996
debian~:$ mkdir -p ~/tmp/app
debian~:$ mv download/CRF++-0.58.tar.gz ~/tmp/app
debian~:$ mv download/cabocha-0.69.tar.bz2 ~/tmp/app
debian~:$ cd ~/tmp/app
debian~:$ tar zxvf CRF++-0.58.tar.gz
debian~:$ cd CRF++-0.58
debian~:$ ./configure
debian~:$ make -j4
debian~:$ sudo make install
debian~:$ tar -jxvf cabocha-0.69.tar.bz2
debian~:$ cd cabocha-0.69
debian~:$ ./configure --with-charset=utf8 --enable-utf8-only
debian~:$ make -j4 && make check
debian~:$ sudo make install
debian~:$ cabocha
debian~:$ cabocha: error while loading shared libraries: libcabocha.so.5: cannot open shared object file: No such file or directory
debian~:$ cabocha-config --libs-only-L | sudo tee /etc/ld.so.conf.d/cabocha.conf
/usr/local/lib
debian~:$ sudo ldconfig
debian~:$ cabocha --version
cabocha of 0.69
debian:~$

 CaboChaをmakeする前にCRF++: Yet Another CRF toolkitに沿ってtarballをダウンロードしてconfigure、make...でmake installしておき、それからCaboChaをconfigure...make...make installします。

 CaboChaについては、UTF8専用とすべく、--with-charset=utf8と--enable-utf8-onlyオプション付きでconfigureしました。

 何れもC++のビルドなのでmakeには、-jオプション(CPUコア・スレッドの2倍の値が目安)をつけるのが妥当でしょう。

 CRF++とCaboChaを行ったり来たりしてしまい、makeに失敗して、あれこれやり直した場合は、特にmake前のmake cleanを忘れずに。

 CaboChaをmake installした後、エラーが出た...、ドキュメンにはないし、なんじゃこりゃ...、でも、MeCabと作者も同じみたいだし、同じようなコマンドがあるはずとwhichしてみたら、まさにcabocha-configコマンドがあったのでmecab.confをcabocha.confにしてteeコマンドで投げ、ldconfigしてみたらいけました。

debian:~$ cabocha
JPOPを再生しようとしたらジェームスがPOPSを再生しちゃったけど、結果良い感じ。
              JPOPを-D            
      再生しようとたら-----D      
            ジェームスが---D      
                    POPSを-D      
        再生しちゃったけど、-----D
                          結果-D |
                            良い-D
                            感じ。
EOS
[Ctrl]+[C]
debian:~$ cabocha -f1
JPOPを再生しようとしたらジェームスがPOPSを再生しちゃったけど、結果良い感じ。
* 0 1D 0/1 1.784968
JPOP 名詞,一般,*,*,*,*,*
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 1 4D 4/5 1.599006
再生 名詞,サ変接続,*,*,*,*,再生,サイセイ,サイセイ
しよ 動詞,自立,*,*,サ変・スル,未然ウ接続,する,シヨ,シヨ
う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ
と 助詞,格助詞,引用,*,*,*,と,ト,ト
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
たら 助動詞,*,*,*,特殊・タ,仮定形,た,タラ,タラ
* 2 4D 0/1 2.511887
ジェームス 名詞,固有名詞,人名,名,*,*,ジェームス,ジェームス,ジェームス
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
* 3 4D 0/1 3.321461
POPS 名詞,一般,*,*,*,*,*
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 4 7D 1/4 -2.404728
再生 名詞,サ変接続,*,*,*,*,再生,サイセイ,サイセイ
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
ちゃっ 動詞,非自立,*,*,五段・ワ行促音便,連用タ接続,ちゃう,チャッ,チャッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
けど 助詞,接続助詞,*,*,*,*,けど,ケド,ケド
、 記号,読点,*,*,*,*,、,、,、
* 5 6D 0/0 0.143316
結果 名詞,副詞可能,*,*,*,*,結果,ケッカ,ケッカ
* 6 7D 0/0 -2.404728
良い 形容詞,自立,*,*,形容詞・アウオ段,基本形,良い,ヨイ,ヨイ
* 7 -1D 0/0 0.000000
感じ 名詞,一般,*,*,*,*,感じ,カンジ,カンジ
。 記号,句点,*,*,*,*,。,。,。
EOS
[Ctrl]+[C]
debian:~$

 結果、こんな感じの出力を得ることができました。

cabocha-python

debian~:$ python -V
Python 3.9.2
debian~:$ pip3 install cabocha-python
...
debian~:$ pip3 list | grep cabocha
cabocha-python  0.69
debian:~$ vi test.py
...
debian:~$ cat test.py
#!/usr/bin/env python3
 
import CaboCha
 
c = CaboCha.Parser()
 
sentence = "JPOPを再生しようとしたら、ジェームスがPOPSを再生しちゃったけど結果良い感じ。"
 
print(c.parseToString(sentence))
debian:~$ chmod u+x test.py
debian:~$ ./test.py
          JPOPを-D            
  再生しようとしたら、-----D      
            ジェームスが---D      
                    POPSを-D      
          再生しちゃったけど-----D
                          結果-D |
                            良い-D
                            感じ。
EOS
 
debian:~$

 pip/pip3でインストールするのは、cabocha-python3じゃなくてcabocha-pythonでした。

ホーム前へ次へ