framallo/prose-lint
GitHub: framallo/prose-lint
一款纯 Rust 编写的离线西/英双语散文校验工具,解决 AI 西语文本重音缺失、拼写错误及语法问题。
Stars: 0 | Forks: 0
# prose-lint
一个**离线**、配置驱动的散文 linter,专为双语(西班牙语/英语)手稿设计。无需网络,无需 Java — 纯 Rust 编写。专为 [bookmill](https://github.com/framallo/bookmill) 出版 pipeline 构建,也可独立使用。
它对一段 Markdown 散文执行四次扫描:
1. **缺失或位置错误的西班牙语波浪号(tildes)** —— 这是 AI 处理西班牙语文本时首要的失败点。如果一个 token 不在字典中,但其*带重音*的形式是有效的,则会标记为 `missing tilde -> `(`leon`→`león`,`habia`→`había`,`senor`→`señor`)。由纯 Rust 编写、兼容 Hunspell 的 [`spellbook`](https://crates.io/crates/spellbook) crate 提供支持,并使用内置的 es_ES / en_US 词典。**支持 Voseo**:接受阿根廷方言形式(`tenés`,`mirá`,`sos`,`fijate`),绝不会将其“纠正”。
2. **拼写** —— 识别未知单词,可通过白名单(allow-list)抑制警告。
3. **规范 / 内部规则** —— 检查正文中的破折号、`%` 符号以及由调用方提供的违禁词表(按行匹配)。
4. **语法**(可选)—— 一个离线的、**类似 LanguageTool 的按语言规则引擎**,直接对文本运行(见下文),以及可选的更重量级的后端。
## 语法:离线的类 LanguageTool 规则引擎
LanguageTool 的语法规则是 *模式 -> 消息(+ 建议)*。其中不需要词性标注的子集,可以简化为针对表面文本的正则表达式。
`prose-lint` 移植了经过精心挑选、高信号的规则子集,用于**西班牙语**和**英语**,作为嵌入数据(`src/rules.rs`)并完全离线运行。
每条规则都提供了一个 `bad` 示例(必须被标记)和一个 `good` 示例(绝对不能被标记),并且 `rules_self_test` 单元测试会针对其自身的示例运行每一条规则 —— 这是**针对文本测试规则的内置方式**。添加一条规则相当于增加了它自己的回归测试。扩展只需追加一个结构体(struct)即可。
### 可选的重量级后端(全部离线)
| Feature | 增加 | 备注 |
|---|---|---|
| *(default)* | 原生规则引擎 + 波浪号 + 拼写 + 规范 | 轻量:仅包含 `regex` + `spellbook` |
| `harper-en` | 通过 [Harper](https://github.com/Automattic/harper) 进行英语语法检查 | 会拉取 `burn` ML 技术栈(较重);提供更深度的英语覆盖 |
| `experimental-es-grammar` | 通过 [nlprule](https://github.com/bminixhofer/nlprule) 实现完整的 LanguageTool 规则集 | 西班牙语支持处于实验性/停滞状态;规则和分词器二进制文件在运行时从 `PROSE_LINT_NLPRULE_ES_RULES` / `_TOKENIZER` 加载(构建后即为离线运行) |
## 用法
```
use prose_lint::{lint_markdown, Lang, Opts};
let opts = Opts { grammar: true, ..Default::default() };
let report = lint_markdown("El leon dijo: haber si viene.", Lang::Es, &opts);
for f in &report.findings {
println!("[{}] {} -> {}", f.kind.tag(), f.text, f.suggestion);
}
// [TILDE] leon -> león
// [GRAMMAR] [ES_HABER_A_VER] haber si -> a ver si
```
`Opts` 包含了白名单(`ignore`)、违禁词(`forbid`)、`allow_percentages`(商业/技术风格)以及 `grammar`(运行语法扫描)。配置解析、文件 I/O 和报告生成由调用方负责。
## 许可证
MIT OR Apache-2.0。内置的 Hunspell 词典(LibreOffice 家族)遵循其各自的许可证;可选的 LanguageTool/nlprule 规则数据为 LGPL,在运行时加载,而非内置。
标签:Rust, 可视化界面, 文本校对, 瑞士军刀, 离线工具, 网络流量审计, 西班牙语, 语法检查, 通知系统