Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@katsuta

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

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
6
Help us understand the problem. What are the problem?