Cluttered Room

Cluttered Room

雑然とした部屋

3分で読めます

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登録されているようだ。


  1. 作者の方もissueとして認識してはいるようである。 ↩︎

  2. 辞書ファイルへのパスが長すぎるので、置く場所を自プロジェクトのディレクトリ内にしてもよかったかもしれない。 ↩︎

  3. 「白砂(しらすな)」を「はくしゃ」としているが、これは十分許容範囲であるように思われる。 ↩︎

  4. https://github.com/sorami/sudachi.rs/blob/develop/src/morpheme.rs ↩︎

  5. 正確にはSudachiPyのRustクローン ↩︎

comments powered by Disqus

最近の投稿

カテゴリ