Ubuntu16.04に形態素解析器Sudachiを入れてみた。

# Sudachi
SudachiはWorks Applicationsさんが公開している形態素解析器です。
複数の分割単位を持っているということで今回使ってみることにしました。

brewを使ってインストールするのが楽そうだったので、Ubuntuでlinuxbrewを使ってインストールを行います。

## linuxbrewのインストール
１．前準備で必要なものをインストール

```
sudo apt-get install build-essential curl git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev
sudo apt-get install gettext
```

２．linuxbrewをインストールし、PATHの設定もついでに行う

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"

echo 'export PATH="$HOME/.linuxbrew/bin:$PATH"' >>~/.bash_profile
echo 'export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH"' >>~/.bash_profile
echo 'export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH"' >>~/.bash_profile
```

これでbrewが使えるようになったはずなので次にSudachiをインストールする。

## Sudachiのインストール
基本的にインストール方法は https://qiita.com/ichiren1/items/ed0f72f59adb1cc8f9ae を参照しています。
なので簡単に流れだけ

１．先に必要なものを揃える

```
brew install git-lfs
brew install maven
```

２．Sudachiインストール

```
git clone https://github.com/WorksApplications/Sudachi.git
cd Sudachi/
mvn package
```
 ※この時にproxyが必要な環境下では`mvn package`でこけます。mavenのproxy設定を行ってもうまく行きませんでした。

# 使ってみた
ビルドが無事完了したら、`target`ディレクトリに入って`java -jar sudachi-0.1.1-SNAPSHOT.jar `を実行すれば動くはず
(system_core.dicがないとエラーになります)

```
cd target

echo '消費者安全調査委員会' | java -jar sudachi-0.1.1-SNAPSHOT.jar -m A
消費 名詞,普通名詞,サ変可能,*,*,* 消費
者 接尾辞,名詞的,一般,*,*,* 者
安全 名詞,普通名詞,形状詞可能,*,*,* 安全
調査 名詞,普通名詞,サ変可能,*,*,* 調査
委員 名詞,普通名詞,一般,*,*,* 委員
会 名詞,普通名詞,一般,*,*,* 会
EOS

echo '消費者安全調査委員会' | java -jar sudachi-0.1.1-SNAPSHOT.jar -m C
消費者 名詞,普通名詞,一般,*,*,* 消費者
安全 名詞,普通名詞,形状詞可能,*,*,* 安全
調査 名詞,普通名詞,サ変可能,*,*,* 調査
委員会 名詞,普通名詞,一般,*,*,* 委員会
EOS
```

ただ何故か https://github.com/WorksApplications/Sudachi にあるC単位と結果が異なる。
どうも辞書の設定を変えたらいいらしい。Sudachiは`core`と`full`の２つの辞書を用意しており、デフォルトでは`core`を使うようになっている。

`classes/sudachi.json` 何か設定ファイルぽい

```
cat classes/sudachi.json 
{
    "systemDict" : "system_core.dic",
    "inputTextPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.DefaultInputTextPlugin" },
        { "class" : "com.worksap.nlp.sudachi.ProlongedSoundMarkInputTextPlugin",
          "prolongedSoundMarks": ["ー", "-", "⁓", "〜", "〰"],
          "replacementSymbol": "ー"}
    ],
    "oovProviderPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.MeCabOovProviderPlugin" },
        { "class" : "com.worksap.nlp.sudachi.SimpleOovProviderPlugin",
          "oovPOS" : [ "補助記号", "一般", "*", "*", "*", "*" ],
          "leftId" : 5968,
          "rightId" : 5968,
          "cost" : 3857 }
    ],
    "pathRewritePlugin" : [
        { "class" : "com.worksap.nlp.sudachi.JoinNumericPlugin",
          "joinKanjiNumeric" : true },
        { "class" : "com.worksap.nlp.sudachi.JoinKatakanaOovPlugin",
          "oovPOS" : [ "名詞", "普通名詞", "一般", "*", "*", "*" ],
          "minLength" : 3
        }
    ]
}
```

とりあえず`system_core.dic`を`system_full.dic`に書き換えてコマンドで指定してみた。

```
echo '消費者安全調査委員会' | java -jar sudachi-0.1.1-SNAPSHOT.jar -r classes/sudachi.json -m A
消費 名詞,普通名詞,サ変可能,*,*,* 消費
者 接尾辞,名詞的,一般,*,*,* 者
安全 名詞,普通名詞,形状詞可能,*,*,* 安全
調査 名詞,普通名詞,サ変可能,*,*,* 調査
委員 名詞,普通名詞,一般,*,*,* 委員
会 名詞,普通名詞,一般,*,*,* 会
EOS
```

```
echo '消費者安全調査委員会' | java -jar sudachi-0.1.1-SNAPSHOT.jar -r classes/sudachi.json -m B
消費者 名詞,普通名詞,一般,*,*,* 消費者
安全 名詞,普通名詞,形状詞可能,*,*,* 安全
調査 名詞,普通名詞,サ変可能,*,*,* 調査
委員会 名詞,普通名詞,一般,*,*,* 委員会
EOS
```

```
echo '消費者安全調査委員会' | java -jar sudachi-0.1.1-SNAPSHOT.jar -r classes/sudachi.json -m C
消費者安全調査委員会    名詞,固有名詞,一般,*,*,*        消費者安全調査委員会
EOS
```

これでいいのか分からないが辞書を変えることで自分の希望通りの出力を得ることができた。

## 最後に
毎回 `java -jar sudachi-0.1.1-SNAPSHOT.ja` を打つのが面倒くさいので適当にスクリプトを書いて簡単に実行できるようにした。

```
cat $(which sudachi)
#!/bin/sh

cd $HOME/Sudachi/target
java -jar sudachi-0.1.1-SNAPSHOT.jar -r classes/sudachi.json $@
```

```
echo '消費者安全調査委員会' | sudachi -m C
消費者安全調査委員会 名詞,固有名詞,一般,*,*,* 消費者安全調査委員会
EOS
```