sudachi.rsという、Rustで実装された形態素解析器がある。それをライブラリとして何か書いて遊ぶための下準備的なメモ。
sudachi.rsとは
Sudachiという形態素解析器(実装はJava)のRustによる非公式クローン。 詳しくは作者の方のブログエントリを参照してほしい。
Sudachiには他にもPythonによる実装(公式)やGoによる実装(非公式)があるようだ。
実際に遊んで見る
sudachi.rs
はまだcrates.ioに登録されていない1。
そのため、自分でソースコードをclone
しておく必要がある。
$ git clone https://github.com/sorami/sudachi.rs.git
また、辞書をこちらからダウンロードして展開しておく。
辞書の配置ディレクトリは(プログラムから呼べる場所であれば)どこでも良いが、ここではsudachi.rsのREADMEに従ってsudachi.rs/src/resources/system.dic
とした。
次に、先程sudachi.rs
をクローンしたのと同じディレクトリで
$ cargo new --bin sudachi_test
こんな感じで、適当な名前で新しいプロジェクトを作る。
そしたら中のCargo.toml
に
[dependencies.sudachi]
path = "../sudachi.rs/"
こんな感じでsudachi.rsへの相対パスを教えてやる。
そしてsrc/main.rs
を開き、
extern crate sudachi;
use sudachi::tokenizer::Mode;
use sudachi::tokenizer::Tokenizer;
fn main() {
let txt = "東海の小島の磯の白砂にわれ泣きぬれて蟹とたはむる";
let bytes = include_bytes!("../../sudachi.rs/src/resources/system.dic");
let tokenizer = Tokenizer::new(bytes);
let morpheme_list = tokenizer.tokenize(&String::from(txt), &Mode::C, false);
for morpheme in morpheme_list{
println!("{}({})",morpheme.surface(),morpheme.reading_form() );
}
}
こんな感じでコードを書いてやる2。
cargo run
で実行すると、
東海(トウカイ)
の(ノ)
小島(コジマ)
の(ノ)
磯(イソ)
の(ノ)
白砂(ハクシャ)
に(ニ)
われ(ワレ)
泣きぬれ(ナキヌレ)
て(テ)
蟹(カニ)
と(ト)
たはむる(タハムル)
と、実に簡単に分かち書きと読みがなの付与ができた3。
利用できる関数
分割された各形態素に対して利用できる関数は次の通り4。
surface
:分割された後の形態素pos
:その形態素に関する情報normalized_form
: 正規化された形reading_form
: 読みがなdictionary_form
: 辞書形
ここまでの感想
わずか数行のコードで、とても簡単にRustでの自然言語処理の第一歩を踏み出すことができた。 ここから更に色々遊べそうである。
追記
sudachiclone-rsという、別の方が作成したSudachiのRustクローン5もあるらしい。 そしてこちらはcrates.ioに登録されているようだ。