#nlp #text #russian #xml-parser #bincode #data #binary-format

kathoey

Rust 库,用于使用开放语料库语言学数据进行文本女性化

13 个稳定版本

1.1.5 2023年5月23日
1.1.4 2022年10月28日
1.1.2 2022年6月28日
1.0.10 2021年10月22日
1.0.2 2021年1月11日

#227 in 文本处理

LGPL-3.0-only

18KB
389

卡托伊

Rust 文本女性化库

Rust crates.io version

  • 目前使用来自 http://opencorpora.org 的俄语
  • 使用 xmlparser 进行 性能优化
  • 将解析后的卡托伊导出为二进制格式
  • 使用 load(从 bincode)来加速!
  • 两种模式(极端和常规)

用法

从 xml 进行序列化并将导出为二进制序列化格式(虽然,导出是可选的,从 xml 导出已经足够快)

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(())
}

少量测试和从二进制导入

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(())
}

依赖项

~455KB