#nlp #error-correction #grammar #spelling #spelling-correction #text-processing #text

bin+lib nlprule

一个快速、资源低廉的自然语言处理和错误纠正库

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 科学

Download history 226/week @ 2024-03-14 269/week @ 2024-03-21 217/week @ 2024-03-28 295/week @ 2024-04-04 253/week @ 2024-04-11 331/week @ 2024-04-18 349/week @ 2024-04-25 280/week @ 2024-05-02 320/week @ 2024-05-09 341/week @ 2024-05-16 342/week @ 2024-05-23 312/week @ 2024-05-30 270/week @ 2024-06-06 356/week @ 2024-06-13 452/week @ 2024-06-20 254/week @ 2024-06-27

1,404 每月下载量
4 crates 中使用

MIT/Apache

315KB
7.5K SLoC

nlprule

PyPI Crates.io Docs.rs PyPI Downloads License

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.")
    );
}

nlprulenlprule-build 版本保持同步。

主要功能

  • 通过数千条规则进行基于规则的语法错误纠正。
  • 一个文本处理管道,进行句子分割、词性标注、词干提取、分块和歧义消除。
  • 支持英语、德语和西班牙语。
  • 拼写检查。(进行中)

目标

  • 为下游任务提供一个应用拼写检查和语法错误纠正的单一位置。
  • 快速、资源低廉的 NLP 适用于
    1. 作为更复杂(即 ML)方法的预/后处理步骤。
    2. 在另一个应用程序的背景下运行,开销低。
    3. 通过 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