use rust_stemmers::Stemmer;
pub fn fold_lower(word: &str) -> String {
word.to_lowercase().replace('ё', "е")
}
pub fn normalize_stem(word: &str, stemmer: &Option<Stemmer>) -> String {
let lc = fold_lower(word);
match stemmer {
Some(s) => s.stem(&lc).into_owned(),
None => lc,
}
}
#[cfg(test)]
mod tests {
use super::*;
use rust_stemmers::{Algorithm, Stemmer};
#[test]
fn fold_lower_folds_yo_and_lowercases() {
assert_eq!(fold_lower("ПошёЛ"), "пошел");
assert_eq!(fold_lower("Hello"), "hello");
assert_eq!(fold_lower("Москва"), "москва");
}
#[test]
fn normalize_stem_without_stemmer_is_fold_lower() {
let none: Option<Stemmer> = None;
assert_eq!(normalize_stem("ПошёЛ", &none), "пошел");
}
#[test]
fn normalize_stem_unifies_yo_and_e_spellings() {
let ru = Some(Stemmer::create(Algorithm::Russian));
assert_eq!(
normalize_stem("пошёл", &ru),
normalize_stem("пошел", &ru)
);
}
}