13 releases

0.3.0 Dec 26, 2021
0.2.10 Jun 12, 2021
0.2.8 Aug 22, 2020
0.2.6 Jul 26, 2020
0.1.0 Mar 13, 2020

#1509 in Text processing

24 downloads per month
Used in pyawabi

MIT license

50KB
983 lines

awabi

awabi is a morphological analyzer using mecab dictionary, written in Rust.

Requirements and how to install

MeCab https://taku910.github.io/mecab/ and related dictionary is required.

Debian/Ubuntu

$ sudo apt install mecab mecab-ipadic-utf8
$ cargo install awabi

Mac OS X (homebrew)

$ brew install mecab
$ brew install mecab-ipadic
$ cargo install awabi

How to use

use as library

Best tokens

example

use awabi::tokenizer;
fn main() {
    let tokenizer = tokenizer::Tokenizer::new(None).unwrap();
    let tokens = tokenizer.tokenize("すもももももももものうち");
    for token in tokens.iter() {
        println!("{}\t{}", token.0, token.1);
    }
}

result

すもも	名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も	助詞,係助詞,*,*,*,*,,,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
も	助詞,係助詞,*,*,*,*,,,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
の	助詞,連体化,*,*,*,*,,,ノ
うち	名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

N-best tokens

example

use awabi::tokenizer;
fn main() {
    let tokenizer = tokenizer::Tokenizer::new(None).unwrap();
    let tokens_list = tokenizer.tokenize_n_best("すもももももももものうち", 3);
    for tokens in tokens_list.iter() {
        println!("------------------------------------------------------");
        for token in tokens.iter() {
            println!("{}\token{}", token.0, token.1);
        }
    }
}

result

------------------------------------------------------
すもも	oken名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も	oken助詞,係助詞,*,*,*,*,,,モ
もも	oken名詞,一般,*,*,*,*,もも,モモ,モモ
も	oken助詞,係助詞,*,*,*,*,,,モ
もも	oken名詞,一般,*,*,*,*,もも,モモ,モモ
の	oken助詞,連体化,*,*,*,*,,,ノ
うち	oken名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
------------------------------------------------------
すもも	oken名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も	oken助詞,係助詞,*,*,*,*,,,モ
もも	oken名詞,一般,*,*,*,*,もも,モモ,モモ
もも	oken名詞,一般,*,*,*,*,もも,モモ,モモ
も	oken助詞,係助詞,*,*,*,*,,,モ
の	oken助詞,連体化,*,*,*,*,,,ノ
うち	oken名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
------------------------------------------------------
すもも	oken名詞,一般,*,*,*,*,すもも,スモモ,スモモ
もも	oken名詞,一般,*,*,*,*,もも,モモ,モモ
も	oken助詞,係助詞,*,*,*,*,,,モ
もも	oken名詞,一般,*,*,*,*,もも,モモ,モモ
も	oken助詞,係助詞,*,*,*,*,,,モ
の	oken助詞,連体化,*,*,*,*,,,ノ
うち	oken名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

Use the specified mecabrc

use awabi::tokenizer;
fn main() {
    let tokenizer = tokenizer::Tokenizer::new(Some("/some/where/mecabrc")).unwrap();
    let tokens = tokenizer.tokenize("すもももももももものうち");
    for token in tokens.iter() {
        println!("{}\t{}", token.0, token.1);
    }
}

awabi command

$ echo 'すもももももももものうち'  | awabi
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
$ echo 'すもももももももものうち'  | awabi -N 2
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
      助詞,係助詞,*,*,*,*,も,モ,モ
      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

See also

Dependencies

~3.5–5MB
~80K SLoC