Sudachi
SudachiはWorks Applicationsさんが公開している形態素解析器です。
複数の分割単位を持っているということで今回使ってみることにしました。
brewを使ってインストールするのが楽そうだったので、Ubuntuでlinuxbrewを使ってインストールを行います。
linuxbrewのインストール
1.前準備で必要なものをインストール
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
2.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 を参照しています。
なので簡単に流れだけ
1.先に必要なものを揃える
brew install git-lfs
brew install maven
2.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
の2つの辞書を用意しており、デフォルトでは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