アルの備忘録

本棚が足りずにいいものを探しているがなかなか見つからないので困ってる系ブロガーの雑記ブログ

【導入手順】Sudachiをインストールして形態素解析をしてみた!

 

Sudachiとは

Sudachiはオープンソースの形態素解析エンジンのひとつで形態素解析や分かち書きの処理が行えます。

Sudachiを開発した研究所が徳島にあるのでSudachiとなったのでしょうか。

MeCabにSudachiにCabochaと、、、

食べ物にまつわるのがお決まりっぽいですね。

 

前回はMeCabを入れてみたので、今回はSudachiを使って形態素解析をしてみます。

MeCabの導入方法MeCabの辞書の導入方法についてはこちらをどうぞ

www.matematetea.com

www.matematetea.com

 

SudachiPy

今回はSudachiをインストールしてPythonで使うためにSudachiPyを入れます。

公式のGitHubを見て進めれば大丈夫ですが、備忘録としてこちらにも記載しておきます。

github.com

 

SudachiPyの導入手順

SudachiPyのインストール

仮想環境に入ったらSudachiPyをインストールします。

pip install sudachipy

 

辞書のインストール

次に辞書をインストールします。

辞書はsmall、core、fullの3種類ありますが、まずはcoreを入れて進めます。

pip install sudachidict_core

 

インストールが完了したら、あとはPythonファイルを作成して動かしていきます。

 

sudachi.pyの作成

公式のGitHubに載せているコードをそのまま張り付けて動かしてみます。

from sudachipy import tokenizer
from sudachipy import dictionary

tokenizer_obj = dictionary.Dictionary().create()
# 複数粒度分割

mode = tokenizer.Tokenizer.SplitMode.C
[m.surface() for m in tokenizer_obj.tokenize("国家公務員", mode)]
# => ['国家公務員']

mode = tokenizer.Tokenizer.SplitMode.B
[m.surface() for m in tokenizer_obj.tokenize("国家公務員", mode)]
# => ['国家', '公務員']

mode = tokenizer.Tokenizer.SplitMode.A
[m.surface() for m in tokenizer_obj.tokenize("国家公務員", mode)]
# => ['国家', '公務', '員']

 

実行して確認してみます。

python sudachi.py run

動かしてみるとコメントアウトされている内容が表示されました。

SudachiPyを実行した結果

 

なるほど、単語ごとに区切られていますね。

MeCabのNEologdインストールの時に検証した文章でも試してみます。

「鬼滅の刃は週刊少年ジャンプの看板作品だったが、今では呪術廻戦が人気だ!」

画像が小さいので、ひとつ抜き出してみました。こうなっています。

['鬼', '滅', 'の', '刃', 'は', '週刊', '少年', 'ジャンプ', 'の', '看板', '作品', 'だっ', 'た', 'が', '、', '今', 'で', 'は', '呪術', '廻', '戦', 'が', '人気', 'だ', '!']

 

MeCabの時とほとんど一緒で、NEologdのほうが精度が良いですね。

NEologdでは「鬼滅の刃」「呪術廻戦」「週刊少年ジャンプ」が一単語になっていました。

 

では次の手を打ってみます。

 

SudachiDict-fullのインストール

さっきはsudachidict_coreをインストールしていたので、デフォルトの状態でした。

fullにしてみたは精度がよくなるのでは?と思ったのでこちらで試してみます。

pip install SudachiDict-full

 

sudachi.pyの更新

coreはデフォルトの状態だったので、辞書をfullに指定します。

品詞なども確認したいのでコードを追加しています。

from sudachipy import tokenizer
from sudachipy import dictionary

tokenizer_obj = dictionary.Dictionary(dict_type="full").create() 
mode = tokenizer.Tokenizer.SplitMode.C
sample_text= "鬼滅の刃は週刊少年ジャンプの看板作品だったが、今では呪術廻戦が人気だ!"
tokens = tokenizer_obj.tokenize(sample_text, mode)
print(tokens)
array = []
for t in tokens:
    array = t.surface(),t.part_of_speech(),t.reading_form(),t.normalized_form()
    print(array)

 

PythonでSudachiを動かしてみる

更新ができたら、再度実行してみます!

Python sudachi.py run

SudachiPyのfullを使ってみた結果

分かち書きで見ても、精度が上がっていますね!

「呪術廻戦」はダメでしたが、「鬼滅の刃」「週刊少年ジャンプ」は一単語として認識されています!

['鬼滅の刃', 'は', '週刊少年ジャンプ', 'の', '看板', '作品', 'だっ', 'た', 'が', '、', '今', 'で', 'は', '呪術', '廻', '戦', 'が', '人気', 'だ', '!']

 

coreではなく、fullを最初から使うのでよさそうですね。