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

sudachiの導入手順のサムネイル画像 Python

Sudachiとは

Sudachiはオープンソースの形態素解析エンジンのひとつで形態素解析や分かち書きの処理が行えます。
Sudachiを開発した研究所が徳島にあるのでSudachiとなったのでしょうか。
MeCabにSudachiにCabochaと、、、
食べ物にまつわるのがお決まりっぽいですね。

以前はMeCabを入れてみたので、今回はSudachiを使って形態素解析をしてみます。
MeCabの導入方法MeCab辞書のNEologdの導入方法もまとめています。




SudachiPy

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

公式のGitHubを見て進めれば大丈夫ですが、備忘録としてこちらにも記載しています。
https://github.com/WorksApplications/SudachiPy/blob/develop/docs/tutorial.md



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

なるほど、単語ごとに区切られていますね。
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

分かち書きで見ても、精度が上がっていますね!
「呪術廻戦」はダメでしたが、「鬼滅の刃」「週刊少年ジャンプ」は一単語として認識されています!

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

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

タイトルとURLをコピーしました