Python3で形態素解析を行えるツールの「JUMAN++」のインストールを行います。
Pythonで形態素解析といえば「Janome」や「MeCab」が有名ですが、そちらに比べ単語の並びの意味的な自然さを考慮した解析を行います。
開発は「京都大学の黒橋・河原研究室」で行われています。
http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++
今回はCentOS7のpython3.6の環境に導入を行なっています。
尚、インストールにあたっては以下を参考にさせていただきました。
★Python3からJUMAN++を使う@CentOS7
https://umiushizn.blogspot.com/2017/09/python3jumancentos7_9.html
インストールの準備
インストールにあたっては「gcc」と「c++」が必要になります。
1 2 3 |
# yum -y install gcc gcc-c++ |
Boost C++ Libraries のインストール
また、インストールにあたっては「Boost C++」が必要になります。
cpuのコア数を確認し、インストール時にj4オプション(コア数に応じて数を変更)をつけないと軽くはまります。
1 2 3 4 5 6 7 8 9 10 |
# cat /proc/cpuinfo # cd /usr/local/src # wget https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.gz # tar xzvf boost_1_69_0.tar.gz # cd boost_1_69_0/ # ./bootstrap.sh # ./b2 install -j4 |
JUMAN++のインストール
インストールはソースから以下のように実施します。
1 2 3 4 5 6 7 8 9 |
# cd /usr/local/src # 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 # tar Jxfv jumanpp-1.02.tar.xz # cd jumanpp-1.02/ # ./configure # make # make install |
無事インストールできたらテストを行います。
1 2 3 4 5 6 7 8 9 |
$ echo "外国人参政権" | jumanpp 外国 がいこく 外国 名詞 6 普通名詞 1 * 0 * 0 "代表表記:外国/がいこく カテゴリ:場所-その他 ドメイン:政治" 人 じん 人 名詞 6 普通名詞 1 * 0 * 0 "代表表記:人/じん 漢字読み:音 カテゴリ:人" @ 人 ひと 人 名詞 6 普通名詞 1 * 0 * 0 "代表表記:人/ひと 漢字読み:訓 カテゴリ:人" 参政 さんせい 参政 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:参政/さんせい カテゴリ:抽象物 ドメイン:政治" 権 けん 権 名詞 6 普通名詞 1 * 0 * 0 "代表表記:権/けん 漢字読み:音 カテゴリ:抽象物" EOS |
はい。無事「人参」というキーワードで分かれずに「外国」「人」「参政」「権」というキーワードで分かれてますね。
Python環境のインストール
さて、無事コマンドから利用できたところでPython環境のインストールを行います。
1 2 3 4 5 6 7 8 9 10 |
# cd /usr/local/src # pip 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 # tar xzvf pyknp-0.3.tar.gz # cd pyknp-0.3 # python setup.py install |
それではサンプルのファイルを準備します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from pyknp import Jumanpp j = Jumanpp() text = '外国人参政権' r = j.analysis(text) 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) from pyknp import Jumanpp |
それでは実行してみます。
1 2 3 4 5 6 7 |
$ python3.6 test.py 外国 がいこく 外国 名詞 普通名詞 * * 代表表記:外国/がいこく カテゴリ:場所-その他 ドメイン:政治 外国/がいこく 人 じん 人 名詞 普通名詞 * * 代表表記:人/じん 漢字読み:音 カテゴリ:人 人/じん 参政 さんせい 参政 名詞 サ変名詞 * * 代表表記:参政/さんせい カテゴリ:抽象物 ドメイン:政治 参政/さんせい 権 けん 権 名詞 普通名詞 * * 代表表記:権/けん 漢字読み:音 カテゴリ:抽象物 権/けん |
先ほどのコマンドと結果は変わらないです。
形態素解析も複数ありますが、それぞれ性能も異なり結果も随分変わってきます。
辞書などによっても結果は変わってきますので、こちらは用途によってで。
今回はこの辺で。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。
お問い合わせやご依頼・ご相談など