LoginSignup
3
6

More than 5 years have passed since last update.

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

Posted at

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はcorefullの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.dicsystem_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
3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6