12 个不稳定版本 (3 个破坏性版本)
0.6.4 | 2021年4月24日 |
---|---|
0.6.3 | 2021年4月18日 |
0.5.3 | 2021年4月1日 |
0.5.1 | 2021年3月31日 |
0.3.0 | 2021年1月17日 |
#216 in 科学
1,404 每月下载量
在 4 crates 中使用
315KB
7.5K SLoC
nlprule
nlprule 是一个用 Rust 编写的快速、资源低廉的自然语言处理和错误纠正库。nlprule 通过使用来自 LanguageTool 的资源实现基于规则和查找的 NLP 方法。
Python 使用方法
安装: pip install nlprule
使用
from nlprule import Tokenizer, Rules
tokenizer = Tokenizer.load("en")
rules = Rules.load("en", tokenizer)
rules.correct("He wants that you send him an email.")
# returns: 'He wants you to send him an email.'
rules.correct("I can due his homework.")
# returns: 'I can do his homework.'
for s in rules.suggest("She was not been here since Monday."):
print(s.start, s.end, s.replacements, s.source, s.message)
# prints:
# 4 16 ['was not', 'has not been'] WAS_BEEN.1 Did you mean was not or has not been?
for sentence in tokenizer.pipe("A brief example is shown."):
for token in sentence:
print(
repr(token.text).ljust(10),
repr(token.span).ljust(10),
repr(token.tags).ljust(24),
repr(token.lemmas).ljust(24),
repr(token.chunks).ljust(24),
)
# prints:
# 'A' (0, 1) ['DT'] ['A', 'a'] ['B-NP-singular']
# 'brief' (2, 7) ['JJ'] ['brief'] ['I-NP-singular']
# 'example' (8, 15) ['NN:UN'] ['example'] ['E-NP-singular']
# 'is' (16, 18) ['VBZ'] ['be', 'is'] ['B-VP']
# 'shown' (19, 24) ['VBN'] ['show', 'shown'] ['I-VP']
# '.' (24, 25) ['.', 'PCT', 'SENT_END'] ['.'] ['O']
Rust 使用方法
推荐设置
Cargo.toml
[dependencies]
nlprule = "<version>"
[build-dependencies]
nlprule-build = "<version>" # must be the same as the nlprule version!
build.rs
fn main() {
println!("cargo:rerun-if-changed=build.rs");
nlprule_build::BinaryBuilder::new(
&["en"],
std::env::var("OUT_DIR").expect("OUT_DIR is set when build.rs is running"),
)
.build()
.validate();
}
src/main.rs
use nlprule::{Rules, Tokenizer, tokenizer_filename, rules_filename};
fn main() {
let mut tokenizer_bytes: &'static [u8] = include_bytes!(concat!(
env!("OUT_DIR"),
"/",
tokenizer_filename!("en")
));
let mut rules_bytes: &'static [u8] = include_bytes!(concat!(
env!("OUT_DIR"),
"/",
rules_filename!("en")
));
let tokenizer = Tokenizer::from_reader(&mut tokenizer_bytes).expect("tokenizer binary is valid");
let rules = Rules::from_reader(&mut rules_bytes).expect("rules binary is valid");
assert_eq!(
rules.correct("She was not been here since Monday.", &tokenizer),
String::from("She was not here since Monday.")
);
}
nlprule
和 nlprule-build
版本保持同步。
主要功能
- 通过数千条规则进行基于规则的语法错误纠正。
- 一个文本处理管道,进行句子分割、词性标注、词干提取、分块和歧义消除。
- 支持英语、德语和西班牙语。
- 拼写检查。(进行中)
目标
- 为下游任务提供一个应用拼写检查和语法错误纠正的单一位置。
- 快速、资源低廉的 NLP 适用于
- 作为更复杂(即 ML)方法的预/后处理步骤。
- 在另一个应用程序的背景下运行,开销低。
- 通过 WebAssembly 在浏览器中客户端运行。
- 100% Rust 代码和依赖项。
与 LanguageTool 的比较
|歧义消除规则| | |语法规则| | LT 版本 | nlprule 时间 | LanguageTool 时间 | |
---|---|---|---|---|---|
英语 | 843 (100%) | 3725 (~ 85%) | 5.2 | 1 | 1.7 - 2.0 |
德语 | 486 (100%) | 2970 (~ 90%) | 5.2 | 1 | 2.4 - 2.8 |
西班牙语 | 实验性支持。尚未完全测试。 |
有关详细信息,请参阅 基准问题。
使用 nlprule 的项目
- prosemd: 一个具有 VSCode 集成的 markdown 文件校对和代码检查语言服务器。
- cargo-spellcheck: 一个用于检查 Rust 文档中拼写和语法错误的工具。
请提交一个PR以添加您的项目!
致谢
nlprule所使用的所有资源归功于LanguageTool,它为语法错误纠正和更广泛的NLP制作了高质量的资源,付出了巨大的努力。
许可证
nlprule采用MIT许可证或Apache-2.0许可证,任选其一。
nlprule的二进制文件(*.bin
)源自LanguageTool v5.2,并按照LGPLv2.1许可证授权。nlprule静态和动态链接到这些二进制文件。根据LGPLv2.1 §6(a),这不会对nlprule本身的许可证产生任何影响。
依赖项
~8–18MB
~226K SLoC