7 个版本
0.2.1 | 2024 年 4 月 28 日 |
---|---|
0.2.0 |
|
0.1.4 | 2024 年 3 月 5 日 |
0.1.3 | 2024 年 1 月 31 日 |
0.0.2 | 2023 年 10 月 24 日 |
#973 in 文本处理
在 2 个 crate 中使用 (via AFrim)
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