2017年9月9日土曜日

Python3からJUMAN++を使う@CentOS7



JUMAN++は、京都大学黒橋・河原研究室で開発されている日本語の形態素解析システムです。RNNを使った言語モデルを使用しているとのことで、MecabやJUMANより自然な感じの形態素解析ができるらしいです。(雑な説明でごめんなさい)
今回のざっくりとした環境は下記のとおりです。CentOS7は最小インストールした直後の状態を想定しています。
  • JUMAN 1.02
  • Python 3.4
  • CentOS 7.3
今回もコンパイルして入れます・・・が、Boost C++ Libraryというものが必要です。 CentOS 7のリポジトリにはJUMAN++に要求されるバージョン(1.58)より古いバージョン(1.53)しかないので、仕方がないのでこちらも最新のもの(1.65)をコンパイルしてインストールします。
とても時間がかかりました。

準備

とりあえず、gccとc++が必要ですのでインストールします。それとPython-develが必要になりますので、インストールします。 (Python3-develでは、boostのコンパイル時にエラーが出るようです。)
yum install gcc gcc-c++ python-devel
yum install epel-release
yum install python34 python34-devel python34-pip

Boost C++ Libraries のインストール

Boostの公式サイトからソースをダウンロードします。
インストール方法は公式サイトの5.2.1に書いてあるみたいです。
なお、Boost C++ Librariesのインストールに当たっては、「boostjp : Boost日本語情報サイト」が大変参考になりました。
mkdir download
mkdir src
cd download
wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz
cd ~/src
tar xzvf ../download/boost_1_65_1.tar.gz

cd boost_1_65_1/
./bootstrap.sh

./b2 install -j2

-j2の部分はコア数に応じて増やした方が、コンパイルが早く終わると思います。

JUMAN++のインストール

長いコンパイルが終わるとやっとJUMAN++のインストールに入れます。 JUMAN++自体は、コンパイルしてインストールするだけです。
cd ~/download/
wget 'http://nlp.ist.i.kyoto-u.ac.jp/DLcounter/lime.cgi?down=http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.02.tar.xz&name=jumanpp-1.02.tar.xz' -O jumanpp-1.02.tar.xz
cd ~/src
tar Jxfv ../download/jumanpp-1.02.tar.xz
cd jumanpp-1.02/

./configure
make
make install
正常に動作するか確認します。
echo "これは、テストです。" | jumanpp

これ これ これ 指示詞 7 名詞形態指示詞 1 * 0 * 0 NIL
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
、 、 、 特殊 1 読点 2 * 0 * 0 NIL
テスト てすと テスト 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:テスト/てすと カテゴリ:抽象物 ドメイン:教育・学習"
です です だ 判定詞 4 * 0 判定詞 25 デス列基本形 27 NIL
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS
上記のような表示されれば、インストールは成功です。

Pythonバインディングのインストール

PyKNPはJUMANをインストールした際に合わせてインストールしている場合は、読み飛ばしてください。
pip3 install six
cd ~/download/
wget 'http://nlp.ist.i.kyoto-u.ac.jp/DLcounter/lime.cgi?down=http://lotus.kuee.kyoto-u.ac.jp/nl-resource/pyknp/pyknp-0.3.tar.gz&name=pyknp-0.3.tar.gz' -O pyknp-0.3.tar.gz
cd ~/src/
tar xzvf ../download/pyknp-0.3.tar.gz
cd pyknp-0.3/
python3 setup.py install



テストプログラムを書いて実行してみます。
ファイル: test.py
from pyknp import Jumanpp

j = Jumanpp()
r = j.analysis('これは、テストです。')
for m in r.mrph_list():
    print (m.midasi, m.yomi, m.genkei, m.hinsi, m.bunrui, m.katuyou1, m.katuyou2, m.imis, m.repname)
下記のように表示されれば、成功です。
python3 test.py 
これ これ これ 指示詞 名詞形態指示詞 * * NIL 
は は は 助詞 副助詞 * * NIL 
、 、 、 特殊 読点 * * NIL 
テスト てすと テスト 名詞 サ変名詞 * * 代表表記:テスト/てすと カテゴリ:抽象物 ドメイン:教育・学習 テスト/てすと
です です だ 判定詞 * 判定詞 デス列基本形 NIL 
。 。 。 特殊 句点 * * NIL

0 件のコメント:

コメントを投稿