気がついたら、前回のブログからだいぶ空いてしまいました。
これまで、Sudachiを使ってユーザー辞書を使おうとした場合には、Sudachi(Java)を使用する必要がありました。 それが最近何やらSudachiPyのリリースがあったらしく、SudachiPyでユーザー辞書が使えるようになったようです。
ということで、今回はそれを使ってみます。
SudachiPyのインストール
普通にReadmeに書いてあるとおりにインストールを進めます。
とりあえずインストールしてみます。 すでに、古いSudachiが入っていたので、まずアンインストール。
pip3 uninstall SudachiPy
続けて、新しくインストールし直します。
pip3 install SudachiPy
sudachi $pip3 install SudachiPy Collecting SudachiPy Downloading https://files.pythonhosted.org/packages/aa/e1/7767146e535d57dd17ce1ad82f049b6b6bb0c1cb639cbd984302b99526cb/SudachiPy-0.3.4-py3-none-any.whl (59kB) |████████████████████████████████| 61kB 2.9MB/s Collecting sortedcontainers<2.2.0,>=2.1.0 (from SudachiPy) Downloading https://files.pythonhosted.org/packages/13/f3/cf85f7c3a2dbd1a515d51e1f1676d971abe41bba6f4ab5443240d9a78e5b/sortedcontainers-2.1.0-py2.py3-none-any.whl Installing collected packages: sortedcontainers, SudachiPy Found existing installation: sortedcontainers 1.5.9 Uninstalling sortedcontainers-1.5.9: Successfully uninstalled sortedcontainers-1.5.9 Successfully installed SudachiPy-0.3.4 sortedcontainers-2.1.0
ってことでインストールできました。
続いて、Sudachiのシステム辞書をインストールします。
pip3 install https://object-storage.tyo2.conoha.io/v1/nc_2520839e1f9641b08211a5c85243124a/sudachi/SudachiDict_core-20190531.tar.gz
システム辞書のfullをインストールする場合はこちらからダウンロードしてください。
これで準備完了です。
早速標準入力から使ってみます。
sudachi $sudachipy すももももももももものうち すもも 名詞,普通名詞,一般,*,*,* 李 も 助詞,係助詞,*,*,*,* も も 助詞,係助詞,*,*,*,* も もも 名詞,普通名詞,一般,*,*,* もも も 助詞,係助詞,*,*,*,* も もも 名詞,普通名詞,一般,*,*,* もも の 助詞,格助詞,*,*,*,* の うち 名詞,普通名詞,副詞可能,*,*,* 内 EOS
ちゃんと動いているみたいですね。
Readmeを読み進めていくと、どうやらSudachipyには4つのコマンドがあるようで、
- 形態素解析(tokenize)
- 辞書へのリンク設定(link)
- Sudachiの辞書のビルド(build)
- ユーザー辞書のビルド(ubuild)
のようになっているようですね。
ユーザー辞書
さてさて、ユーザー辞書です。
https://github.com/WorksApplications/SudachiPy#customized-dictionary
手順としては、
- ユーザー辞書を作成
- ユーザー辞書をビルド
- sudachi.jsonにユーザー辞書を指定
という感じのようです。
ユーザー辞書を作成
こちらの記事を参考にする感じでは、csvフォーマットでユーザー辞書を記述してあげるようです。
ユーザー辞書をビルド
そんでもってこれをビルドしてあげます。
sudachipy ubuild -s /path/to/your/system.dic user_dict.txt
今回はこんな感じになりました。
reading the source file...1 words writing the POS table...2 bytes writing the connection matrix...4 bytes building the trie...done writing the trie...1028 bytes writing the word-ID table...9 bytes writing the word parameters...10 bytes writing the word_infos...53 bytes writing word_info offsets...4 bytes
するとuser.dicというビルド済みのユーザー辞書が生成されます。
sudachi.jsonにユーザー辞書を指定
最後に設定ファイルであるsudachi.jsonを書いてあげる必要があるようです。
今回はデフォルトのsudachi.json自体をいじっちゃいます。
3行目みたいな感じで、リスト形式でユーザー辞書のパスを指定してあげます。
使ってみる
やってみるとこんな感じです。
Before
sudachi $sudachipy きゃりーぱみゅぱみゅ き 助動詞,*,*,*,文語助動詞-キ,終止形-一般 き ゃ 記号,一般,*,*,*,* ヤ り 助動詞,*,*,*,文語助動詞-リ,終止形-一般 り ー 補助記号,一般,*,*,*,* ー ぱ 副詞,*,*,*,*,* ぱっ み 接頭辞,*,*,*,*,* み ゅ 記号,一般,*,*,*,* ユ ぱ 副詞,*,*,*,*,* ぱっ み 接頭辞,*,*,*,*,* み ゅ 記号,一般,*,*,*,* ユ EOS
After
sudachi $sudachipy きゃりーぱみゅぱみゅ きゃりーぱみゅぱみゅ 名詞,固有名詞,一般,*,*,* きゃりーぱみゅぱみゅ EOS
ちゃんと変わってますね。
Dockerを使ってやってみる
上はMacbookでやったものなんで、もうちょっと汎用的にしてみます。
Dockerfile
みんな大好きDockerで環境を作っていこうかと。
※Flaskは後でマイクロサービス化しようとしたので、その関係で入っています。
そんでもってsudachi.jsonにユーザー辞書の記述を加えてやります。 上の環境だとこちらにインストールされていました。
/usr/local/lib/python3.6/dist-packages/sudachipy/resources/sudachi.json
なので、こちらのファイルを書き直すとうまくいきます。
形態素解析
さて、お待ちかねのsudachiの登場です。
といっても、ここまでくれば上とほとんど変わりません。
これを動かすとこんな感じです。
src $docker exec -it fd2d3e31a41d python3 src/sudachi.py ['きゃりーぱみゅぱみゅ'] ['吾輩', 'は', '猫', 'だ', 'ある', '。', '名前', 'は', 'まだ', 'ない', '。']
きゃりーぱみゅぱみゅが1語として扱われているので、ユーザー辞書が効いていることがわかります。 普通に単語の正規化もできていますね。
感想
とりあえず、ユーザー辞書が使えることは確認しました。 これで他の形態素解析器とおんなじ感じで使えそうです。