rsmorphy 0.4.0

Morphological analyzer / inflection engine for Russian and Ukrainian (soon) languages (WIP)
extern crate rsmorphy;

use rsmorphy::{prelude::*, rsmorphy_dict_ru};

pub mod util;

use util::print_row_parsed;

fn table(morph: &MorphAnalyzer, s: &str) {
    for (i, parsed) in morph.parse(s).into_iter().enumerate() {
        let enc = parsed.lex.encoded();
        let (s, dec) = Lex::decode(&enc).unwrap();
        let decoded = Parsed {
            lex: dec,
            score: parsed.score,
        }; //dec.score()
        assert_eq!(s, "");
        print_row_parsed(morph, i, &parsed);
        print_row_parsed(morph, i, &decoded);
        println!();
    }
}

fn main() {
    let morph_ru = MorphAnalyzer::from_file(rsmorphy_dict_ru::DICT_PATH);

    //    table(&morph_ru, "яблоко");
    //    table(&morph_ru, "хлеб");
    //    table(&morph_ru, "рыба");
    //    table(&morph_ru, "стали");
    table(&morph_ru, "того");
    //    table(&morph_ru, "И");
    //    table(&morph_ru, "БГ");
    //    table(&morph_ru, "БГ-с");
    //    table(&morph_ru, "смотри-ка");
    //    table(&morph_ru, "человек-пароход");
    //    table(&morph_ru, "интернет-магазин");
    //    table(&morph_ru, "по-русски");
    //    table(&morph_ru, "по-западному");
    //    table(&morph_ru, "псевдокошку");
    //    table(&morph_ru, "байткод");
    //    table(&morph_ru, "бутявкать");
    //    table(&morph_ru, "бутявкает");
    //    table(&morph_ru, "pdf");
    //    table(&morph_ru, "42");
    //    table(&morph_ru, "3.14");
    //    table(&morph_ru, "XIII");
    //    table(&morph_ru, ", ");
    //    table(&morph_ru, ".");

    // Words, broken with wrong keyboard layout
    //    table(&morph_ru, "задaч");
    //    'ru:f:peзaть,3;ks:'
    //    'ru:f:мoжeт,3;ks:'
    //    'ru:f:болeе,b4;ks:'
    //    'ru:f:стeпeнь,3;ks:'
    //    'ru:f:pешeние,4c;ks:ие'
}