rsmorphy 0.4.0

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

use std::collections::BTreeSet;
use std::iter::FromIterator;

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

pub mod util;

use util::{input_loop, print_row_lex};

fn print_lexeme(morph: &MorphAnalyzer, lex: &Lex) {
    for (i, lex) in lex.iter_lexeme(morph).enumerate() {
        print_row_lex(morph, i, &lex);
    }
}

fn list(morph: &MorphAnalyzer, s: &str) {
    let set = BTreeSet::from_iter(
        morph
            .parse(s)
            .into_iter()
            .map(|parsed| parsed.lex.get_lemma(morph).encoded()),
    );
    for (i, id) in set.into_iter().enumerate() {
        let lemma = Lex::from_id(morph, id).unwrap();
        println!("  === {}. {} ===", i + 1, lemma.get_word());
        print_lexeme(morph, &lemma);
    }
}

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

    input_loop(|word| list(&morph_ru, word));
}