JUMAN++の導入からPythonで日本語を形態素解析するまで

## はじめに
自然言語処理関係のことを行う場合に必ずと言っていい程、形態素解析を用いる必要があります。
日本語を利用できる形態素解析器は「[MeCab](http://taku910.github.io/mecab/)」と「[JUMAN++](http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++)」が有名です。
今回はJUMAN++を導入して形態素解析を行っていきます。

この記事で扱う内容は以下の通りです。

* Juman++の導入
* PythonからJuman++を利用する

### 自然言語処理とは

> 自然言語処理（しぜんげんごしょり、英語: natural language processing、略称：NLP）は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術であり、人工知能と言語学の一分野である。
[自然言語処理|Wikipedia](https://ja.wikipedia.org/wiki/自然言語処理)

**「一言で言うと」**：人間が普段使っている言語をコンピュータで処理する技術

### 形態素解析とは

> 形態素解析（けいたいそかいせき、Morphological Analysis）とは、文法的な情報の注記の無い自然言語のテキストデータ（文）から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素（Morpheme, おおまかにいえば、言語で意味を持つ最小単位）の列に分割し、それぞれの形態素の品詞等を判別する作業である。
[形態素解析|Wikipedia](https://ja.wikipedia.org/wiki/形態素解析)

**「一言で言うと」**：与えられた文に対して、意味を持つ最小の単語に分けて品詞情報などを付与する処理

### JUMAN++とは
JUMAN++は京都大学黒橋・河原研究室により開発された高性能な形態素解析システムです。言語モデルとしてRNNLMを用いることにより、単語の並びの意味的な自然さを考慮した解析を行います。
基本的な精度は変わりませんが、単語の繋がりの良さに加えて、幾つかの点においてMeCabよりも高い精度が確認されたようです。ですが速度が他に比べて遅いようなので、リアルタイム性が必要な場合はMeCabを利用するのがいいかもしれません。

**「一言で言うと」**：日本語の高性能な形態素解析器であり、MeCabをも上回る精度かもしれない

動作環境

* OS: Linux ( CentOS 6.7 で動作を確認 )
* 必要メモリ: 4GB 以上
* ディスク容量: 2GB 以上

## JUMAN++の導入
それではJUMAN++の導入を始めます。
今回はLinuxにJUMAN++を導入していきます。

macの方は[こちら](http://chezou.hatenablog.com/entry/2016/10/15/162047)を参考にしてください。

参考にしたサイトはこの二つです。

* [新形態素解析器JUMAN++を触ってみたけど思ったより高精度でMeCabから乗り換えようかと思った話](http://qiita.com/riverwell/items/438e88427363511e9f28)
* [JUMAN++ マニュアル v1.01 (pdf)](http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-manual-1.01.pdf)

まずはJUMAN++を利用するための前提パッケージを2つインストールしてください。

* gcc (4.9 以降)
* Boost C++ Libraries (1.57 以降)

※gccはすでにインストール済みの方が多いので心配いりませんが、Boostが1.57以降ではないとエラーが出るので、要注意です。

次はJUMAN++本体をインストールします。

```
$ wget http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.01.tar.xz
$ tar xJvf jumanpp-1.01.tar.xz
$ cd jumanpp-1.01
$ ./configure
$ make
$ make install
```

これでJUMAN++がインストールされました！
デフォルトでは /usr/local/ にインストールされるので、インストール先を指定する場合は./configure
に--prefix=/path オプションを付加してください。

早速試してみます。

```
$ jumanpp
形態素解析の勉強を始めました

形態 けいたい 形態 名詞 6 普通名詞 1 * 0 * 0 "代表表記:形態/けいたい カテゴリ:形・模様"
素 そ 素 名詞 6 普通名詞 1 * 0 * 0 "代表表記:素/そ 漢字読み:音 カテゴリ:抽象物"
解析 かいせき 解析 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:解析/かいせき カテゴリ:抽象物 ドメイン:教育・学習;科学・技術"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
勉強 べんきょう 勉強 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:勉強/べんきょう カテゴリ:抽象物 ドメイン:教育・学習"
を を を 助詞 9 格助詞 1 * 0 * 0 NIL
始め はじめ 始める 動詞 2 * 0 母音動詞 1 基本連用形 8 "代表表記:始める/はじめる 付属動詞候補（基本） 自他動詞:自:始まる/はじまる 反義:動詞:終える/おえる"
ました ました ます 接尾辞 14 動詞性接尾辞 7 動詞性接尾辞ます型 31 タ形 7 "代表表記:ます/ます"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS

```
JUMAN++の実行ファイルは jumanppです。私の環境では、インストール先のフォルダ内/binにありました。 
JUMAN++でうまく形態素解析されました！

## PythonからJUMAN++を利用する
次はPythonからJUMAN++を利用していきます。

JUMAN++はPyKNPを使ってPythonから利用できます。
PyKNPを利用する際に、現在の環境にJUMANとKNPが入っていない場合はこの二つもインストールする必要があります。

以下のサイトを参考にしました。
[JUMAN++をPythonから使う](http://qiita.com/riverwell/items/7a85ebf95647eaf18a6c)

* PyKNP(JUMANとKNPのPythonバインディング)
* JUMAN(形態素解析器)
* KNP(構文解析器) 

以上３つのインストール方法は[参考サイト](http://qiita.com/riverwell/items/7a85ebf95647eaf18a6c)で行ってください。

いよいよPythonからJUMAN++を呼び出してみます！

```python_jumanpp.py
#-*- encoding: utf-8 -*-
from pyknp import Jumanpp
import sys
import codecs
sys.stdin = codecs.getreader('utf_8')(sys.stdin)
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
# Use Juman++ in subprocess mode
jumanpp = Jumanpp()
result = jumanpp.analysis(u"自然言語処理始めました。")
for mrph in result.mrph_list():
	print u"見出し:%s" % (mrph.midasi)
```

```
$ python python_jumanpp.py
見出し:自然
見出し:言語
見出し:処理
見出し:始め
見出し:ました
見出し:。
```

無事にPythonからJUMAN++を利用できました！

以上