MeCabよりも高精度なJUMAN++をUbuntuにインストールしたよ
どうも、一応Web系から投資まで幅広く扱っている本サイトですが、現在一番アクセスがあるのが自然言語処理分野のようです。その中でもよく読まれているのはMeCabやWord2Vecみたいです。今回は形態素解析において、RNNLMを使うことでMeCabよりも高精度に解析できると噂されている京都大学の研究室作「JUMAN++」をUbuntuが入っている端末にインストールしました。また、Pythonから使えるようにしときました。
OS : Ubuntu 16.04 LTS
JUMAN++ : 1.01
Python : 2.7.12 と 3.5.2
1. JUMAN++のインストール
正直なところ、JUMAN++の配布ページにあるマニュアルを読めば、手順なんてものは即効でわかっちゃうのですが、一応ここでも載っけておきます。まずは、必要なファイルをDLしましょう。ダウンロードは配布ページからできますが、めんどくさい人はwgetを使えばいいと思います。wgetならコマンドは以下のとおりです。
1 |
$ wget http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.01.tar.xz |
将来的にソフトのバージョンが上がり、ダウンロードリンクが変わる可能性があるので、一応ページで確認するのがいいと思います。
次にダウンロードしたファイルを解答してインストールしていきます。
1 2 3 4 5 |
$ tar xJvf jumanpp-1.01.tar.xz $ cd jumanpp-1.01 $ ./configure $ make $ sudo make install |
これでインストール完了です。マニュアルを見ると、「gperftools」と「libunwind」というライブラリを入れることで高速化できるようですが、今回はお試しなので、これはパスします。
追記 configureでエラーが出たら
今回自分は2つの端末にJUMAN++をインストールしたのですが、片方の端末でconfigureを実行した時にエラーで止まってしまいました。このとき出たのは、以下のようなエラーでした。
1 2 |
checking for boostlib >= 1.57... configure: We could not detect the boost libraries (version 1.57 or higher). If you have a staged boost library (still not installed) please specify $BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation. configure: error: "Error: cannot find available Boost library." |
なんだか、色々書いてあるますが、なんかboostlibなるもののバージョンか存在が怪しいみたいです。というわけで、なんとなく調べてみると、以下のコマンドでインストールすると解決する場合があるようです。実際に自分の環境ではこれで解決できました。
1 |
$ sudo apt-get install libboost-all-dev |
2. 試してみる
では、実際に解析してみましょう。今回被験体となるテキストは”test.txt”というファイルに入れておきます。
1 |
吾輩はニートである。収入はまだない。 |
このテキストファイルに対して以下のコマンドを実行すると解析結果が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ cat test.txt | jumanpp 吾輩 わがはい 吾輩 名詞 6 普通名詞 1 * 0 * 0 "代表表記:我が輩/わがはい カテゴリ:人" は は は 助詞 9 副助詞 2 * 0 * 0 NIL ニート ニート ニート 名詞 6 普通名詞 1 * 0 * 0 "自動獲得:Wikipedia Wikipedia多義" である である だ 判定詞 4 * 0 判定詞 25 デアル列基本形 15 NIL 。 。 。 特殊 1 句点 1 * 0 * 0 NIL 収入 しゅうにゅう 収入 名詞 6 普通名詞 1 * 0 * 0 "代表表記:収入/しゅうにゅう カテゴリ:人工物-金銭;抽象物 ドメイン:家庭・暮らし;ビジネス 反義:名詞-サ変名詞:支出/ししゅつ" は は は 助詞 9 副助詞 2 * 0 * 0 NIL まだ まだ まだ 副詞 8 * 0 * 0 * 0 "代表表記:まだ/まだ" ない ない ない 形容詞 3 * 0 イ形容詞アウオ段 18 基本形 2 "代表表記:無い/ない 反義:動詞:有る/ある" @ ない ない ない 形容詞 3 * 0 イ形容詞アウオ段 18 基本形 2 "代表表記:無い/ない 反義:動詞:有る/ある" 。 。 。 特殊 1 句点 1 * 0 * 0 NIL EOS |
こんな感じに表示されれば大丈夫だと思います。
3. Pythonから使えるようにする
ついでにPythonからつかえるように環境を作っておきます。といっても、すでに必要なものはまとめられているのでコマンドで簡単にインストールできます。では、無心で以下のコマンドを実行します。
1 2 3 4 |
$ wget http://nlp.ist.i.kyoto-u.ac.jp/nl-resource/knp/pyknp-0.3.tar.gz $ tar xvf pyknp-0.3.tar.gz $ cd pyknp-0.3/ $ sudo python setup.py install |
たったこれだけで、PythonからJUMAN++を使うことができます。自分の環境では、端末にPython2.7.12とPython3.5.2がインストールされていますが、上記のコマンドでpython2系(pythonコマンドで実行されるバージョン)にインストールすることができます。ちなみにpython3系にインストールするには、以下のコマンドです(pythonの部分をpythonにしただけ)。
1 |
$ sudo python3 setup.py install |
実際にPythonのコードから呼び出すときは、最低限以下の感じに書けば解析できるようです。
1 2 3 4 5 6 7 8 |
#coding:utf-8 from pyknp import Jumanpp jumanpp = Jumanpp() result = jumanpp.analysis('これはテストだとおもっていました。') for mrph in result.mrph_list(): print("%s"%(mrph.midasi)) |
このコードを実行することで解析できます。ちなみに上記のコードはPython3で実行するときの最低限のものを書きました。Python2版はマニュアルに掲載されているのでここでは省略します。
おわりに
今回は、JUMAN++のインストールだけをやってきましたが、次はこれを使って精度の検証とかしておこうかなとおもいます。
「JUMAN++ – KUROHASHI-KAWAHARA LAB」
2016/11/25 プログラムのコードを修正しました。