7 个版本

0.2.1 2024 年 4 月 28 日
0.2.0 2024 年 4 月 28 日
0.1.4 2024 年 3 月 5 日
0.1.3 2024 年 1 月 31 日
0.0.2 2023 年 10 月 24 日

#973 in 文本处理


2 个 crate 中使用 (via AFrim)

MPL-2.0 许可协议

20KB
193

AFrim 翻译器

增强输入法引擎中的语言处理任务。

功能

  • rhai: 启用 rhai 脚本语言的使用。
  • rhai-wasm: 类似 rhai,但兼容 wasm。
  • strsim: 启用文本相似度算法以实现更好的预测。
  • serde: 启用序列化和反序列化。

lib.rs:

该 crate 提供了一系列语言相关功能,包括翻译、自动建议、自动纠正等。它旨在增强输入法引擎中的语言处理任务。

注意:为了在处理大数据集时获得更好的性能,我们使用 IndexMap 而不是 HashMap

功能标志

为了减少 crate 中编译的代码量,您可以手动启用功能。这通过在依赖规范中添加 default-features = false 来完成。以下是此 crate 中可用的功能列表。

  • rhai: 启用 rhai 脚本文件的使用。
  • rhai-wasm: 类似 rhai,但兼容 wasm。
  • strsim: 启用文本相似度算法以实现更好的预测。
  • serde: 启用 serde 功能。

示例

use afrim_translator::{Predicate, Translator};
use indexmap::IndexMap;

// Prepares the dictionary.
let mut dictionary = IndexMap::new();
dictionary.insert("jump".to_string(), vec!["sauter".to_string()]);
dictionary.insert("jumper".to_string(), vec!["sauteur".to_string()]);
dictionary.insert("nihao".to_string(), vec!["hello".to_string()]);

// Builds the translator.
let mut translator = Translator::new(dictionary, true);

assert_eq!(
    translator.translate("jump"),
    vec![
        Predicate {
            code: "jump".to_owned(),
            remaining_code: "".to_owned(),
            texts: vec!["sauter".to_owned()],
            can_commit: true
        },
        // Auto-completion.
        Predicate {
            code: "jumper".to_owned(),
            remaining_code: "er".to_owned(),
            texts: vec!["sauteur".to_owned()],
            can_commit: false
        }
    ]
);

使用 strsim 功能的示例

use afrim_translator::{Predicate, Translator};
use indexmap::IndexMap;

// Prepares the dictionary.
let mut dictionary = IndexMap::new();
dictionary.insert("jump".to_string(), vec!["sauter".to_string()]);
dictionary.insert("jumper".to_string(), vec!["sauteur".to_string()]);

// Builds the translator.
let mut translator = Translator::new(dictionary, true);

// Auto-suggestion / Auto-correction.
#[cfg(feature = "strsim")]
assert_eq!(
    translator.translate("junp"),
    vec![Predicate {
        code: "jump".to_owned(),
        remaining_code: "".to_owned(),
        texts: vec!["sauter".to_owned()],
        can_commit: false
    }]
);

使用 rhai 功能的示例

#[cfg(feature = "rhai")]
use afrim_translator::Engine;
use afrim_translator::{Translator, Predicate};
use indexmap::IndexMap;

// Prepares the dictionary.
let mut dictionary = IndexMap::new();
dictionary.insert("jump".to_string(), vec!["sauter".to_string()]);
dictionary.insert("jumper".to_string(), vec!["sauteur".to_string()]);

// Prepares the script.
#[cfg(feature = "rhai")]
let engine = Engine::new();
#[cfg(feature = "rhai")]
let jump_translator = engine.compile(r#"
    // The main script function.
    fn translate(input) {
        if input == "jump" {
            [input, "", "\n", false]
        }
    }
"#).unwrap();

// Builds the translator.
let mut translator = Translator::new(dictionary, true);

// Registers the jump translator.
#[cfg(feature = "rhai")]
translator.register("jump".to_string(), jump_translator);

assert_eq!(
    translator.translate("jump"),
    vec![
        Predicate {
            code: "jump".to_owned(),
            remaining_code: "".to_owned(),
            texts: vec!["sauter".to_owned()],
            can_commit: true
        },
        #[cfg(feature = "rhai")]
        // Programmable translation.
        Predicate {
            code: "jump".to_owned(),
            remaining_code: "".to_owned(),
            texts: vec!["\n".to_owned()],
            can_commit: false
        },
        // Auto-completion.
        Predicate {
            code: "jumper".to_owned(),
            remaining_code: "er".to_owned(),
            texts: vec!["sauteur".to_owned()],
            can_commit: false
        }
    ]
);

依赖

~4–6.5MB
~119K SLoC