Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away