kathoey

Crates.iokathoey
lib.rskathoey
version1.1.5
sourcesrc
created_at2021-01-11 14:57:22.681609
updated_at2023-05-23 11:10:12.466407
descriptionRust library for text feminization using open corpus linguistics data
homepage
repositoryhttps://github.com/Miezhiko/Kathoey
max_upload_size
id340444
size26,546
(Miezhiko)

documentation

README

Kathoey

Rust library for text feminization

Rust crates.io version

  • currently using Russian from http://opencorpora.org
  • using xmlparser for perfomance
  • exporting parsed Kathoey to binary format
  • use load (from bincode) for speed up!
  • two modes (extreme and regular)

Usage

Serialization from xml and export to binary serialized format (tho, export is optional, export from xml is fast enough)

fn from_xml() -> eyre::Result<()> {
  match Kathoey::from_xml("dict.opcorpora.xml") {
    Ok(k) => {
      if let Err(exerr) = k.save("dict.bin") {
        return
          Err(eyre!("Failed to export {:?}", exerr));
      }
    }
    Err(kerr) => {
      return
        Err(eyre!("Failed to create {:?}", kerr));
    }
  }
  Ok(())
}

Few test and import from binary:

fn from_binary() -> eyre::Result<()> {
  match Kathoey::load("dict.bin") {
    Ok(k) => {
      assert_eq!("Я сделала это!", k.feminize("Я сделал это!"));
      assert_eq!("Я потеряла ключи", k.feminize("Я потерял ключи"));
      assert_eq!("Хорошо, я ответила.", k.feminize("Хорошо, я ответил."));
      assert_eq!("Я не хотела этого говорить на случай, если ты увидишь",
        k.feminize("Я не хотел этого говорить на случай, если ты увидишь"));
      assert_eq!("Я уверена, что у него была идея получше, он просто забыл",
        k.feminize("Я уверен, что у него была идея получше, он просто забыл"));
      assert_eq!("Вообще-то, я была немного удивлена.",
        k.feminize("Вообще-то, я был немного удивлен."));
      assert_eq!("Мне нравилось, когда я в аниме и не беспокойся о спойлерах.",
        k.feminize("Мне нравилось, когда я в аниме и не беспокойся о спойлерах."));
      assert_eq!("Я скажу ему это.",
        k.feminize("Я скажу ему это."));
      assert_eq!("Начала наруто смотреть",
        k.feminize("Начал наруто смотреть"));
    }
    Err(kerr) => {
      return
        Err(eyre!("Failed to import rs {:?}", kerr));
    }
  }
  Ok(())
}
Commit count: 57

cargo fmt