尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

为 nlprule 构建自定义语言资源:make_build_dir.py 从零到一完整教程

为 nlprule 构建自定义语言资源:make_build_dir.py 从零到一完整教程 为 nlprule 构建自定义语言资源make_build_dir.py 从零到一完整教程【免费下载链接】nlpruleA fast, low-resource Natural Language Processing and Text Correction library written in Rust.项目地址: https://gitcode.com/gh_mirrors/nl/nlprule如果你正在使用nlprule——这款用 Rust 编写、主打快速与低资源占用的自然语言处理与文本纠错库就一定绕不开语言资源这个词。nlprule 本身并不内置语法规则它依赖由LanguageTool 规则转换而来的构建文件build files通过make_build_dir.py脚本一键生成。本文是一份面向新手的完整教程带你从零到一跑通make_build_dir.py亲手为 nlprule 构建出属于自己的语言资源目录。一、为什么需要 make_build_dir.pynlprule 的架构非常有意思它把数千条语法纠错规则Grammar Rules、消歧规则Disambiguation Rules、词性标注词典tagger dictionary等资源先整理成一个构建目录build directory再在编译期由 Rust 代码见 nlprule/src/compile/mod.rs打包成高效的二进制文件.bin供Tokenizer和Rules加载使用。而make_build_dir.py扮演的角色就是把从 LanguageTool 及开源词典项目中获取的原始 XML 规则文件、词性词典、分词模型加工成 nlprule 能识别的 build 目录。官方构建说明位于 build/README.md脚本本体在 build/make_build_dir.py。一个 build 目录里都有什么成功运行脚本后--out_dir指定的目录下会生成这些文件文件/目录作用grammar.xml语法纠错规则来自 LanguageTooldisambiguation.xml词性消歧规则segment.srx句子切分规则tags/output.dump词性标注词典导出结果tags/added.txt、tags/removed.txt词典增删补丁tags/multiwords.txt多词表达标注common.txt高频词表用于优化chunker.json分块模型仅英语等需要分块的语言lang_code.txt语言代码标记二、构建前的环境准备最快配置方法make_build_dir.py是 Python 脚本但它依赖的原料来自 Java 生态所以前置环境需要三样东西Python 3.6 及以上版本运行脚本本身Java 运行环境脚本内部会调用 Java 程序导出词典DictionaryExporterPython 依赖包wordfreq、lxml、chardet。仓库已在 build/requirements.txt 中锁定版本直接安装即可pip install -r build/requirements.txt此外你还需要准备以下语言原料脚本本身不提供LanguageTool 桌面版目录里面包含grammar.xml、disambiguation.xml等规则文件词性词典.dict格式的词典文件及其配套的.info文件OpenNLP 模型仅英语需要tokenizer、POS tagger、chunker 三个二进制模型。小提示各语言的.dict词典一般来自社区维护的独立词典项目比如德语词性词典、西班牙语词性词典英文词典则随 LanguageTool 资源目录提供。三、make_build_dir.py 参数逐一详解在动手之前先花两分钟看懂脚本的命令行参数源码见 build/make_build_dir.py 的ArgumentParser部分参数是否必填说明--lt_dir是LanguageTool 桌面版所在目录--lang_code是语言代码ISO 639-1 两位字母如en、de、es--tag_dict_path是词性词典.dict文件路径--tag_info_path是与词典配套的.info文件路径--chunker_token_model否OpenNLP 分词模型英语等需要分块的语言必填--chunker_pos_model否OpenNLP 词性标注模型--chunker_chunk_model否OpenNLP 分块模型--out_dir是生成的 build 目录输出位置如果只想快速查看帮助运行python build/make_build_dir.py --help四、从零到一英语en构建实例下面以英语为例展示一条完整的构建命令参考 build/README.md 的官方示例。假设$LT_PATH指向你的 LanguageTool 目录python build/make_build_dir.py \ --lt_dir$LT_PATH \ --lang_codeen \ --tag_dict_path$LT_PATH/org/languagetool/resource/en/english.dict \ --tag_info_path$LT_PATH/org/languagetool/resource/en/english.info \ --chunker_token_model$HOME/Downloads/nlprule/en-token.bin \ --chunker_pos_model$HOME/Downloads/nlprule/en-pos-maxent.bin \ --chunker_chunk_model$HOME/Downloads/nlprule/en-chunker.bin \ --out_dirdata/en脚本执行过程中会依次完成四件事生成高频词表调用wordfreq库导出该语言的高频词见write_freqlist函数并自动补充标题大小写形式复制并规范化 XML 规则从 LanguageTool 目录复制grammar.xml、disambiguation.xml等文件再用lxml做 C14N 规范化canonicalize函数保证 XML 格式统一导出词性词典调用 Java 的DictionaryExporter把.dict词典导出为纯文本output.dump并通过chardet自动检测编码、转成 UTF-8转换分块模型有 OpenNLP 模型时通过 build/chunker.py 把 OpenNLP 的二进制模型解析为 JSON 格式的chunker.json。命令执行完毕后控制台会打印Success!data/en目录即为可用的 build 目录。五、德语与西班牙语的构建差异德语de和西班牙语es同样受支持languages.txt见 build/languages.txt里就登记了这三种语言。与英语最大的区别是德语和西班牙语不需要 OpenNLP 分块模型因此构建命令更简单python build/make_build_dir.py \ --lt_dir$LT_PATH \ --lang_codede \ --tag_dict_path$HOME/Downloads/nlprule/german-pos-dict/.../german.dict \ --tag_info_path$HOME/Downloads/nlprule/german-pos-dict/.../german.info \ --out_dirdata/de西班牙语的命令结构完全一致只需把词典路径换成es-ES.dict/es-ES.info。需要留意的是西班牙语的disambiguation.xml和grammar.xml目前需要少量手工修正比如移除一个无效的marker标签脚本本身不会自动处理官方文档已注明这些问题将在后续 LanguageTool 版本中修复。六、构建完成之后把 build 目录编译成二进制生成 build 目录只是第一步。要让 nlprule 真正用上这些资源还需要用compile二进制把 build 目录编译成.bin文件。官方流程如下命令来自 build/README.mdRUST_LOGINFO cargo run --all-features --bin compile -- \ --build-dir data/en \ --tokenizer-out storage/en_tokenizer.bin \ --rules-out storage/en_rules.bin编译过程中Rust 代码会依次完成读取高频词表 → 创建 Tagger词性标注器→ 构建 Chunker 与多词标注器 → 从disambiguation.xml生成 Tokenizer → 从grammar.xml生成规则集最终写出两个二进制文件流程细节见 nlprule/src/compile/mod.rs。编译完成后就可以在 Python 或 Rust 中加载并使用你自己的语言资源了from nlprule import Tokenizer, Rules tokenizer Tokenizer.load(en) rules Rules.load(en, tokenizer) print(rules.correct(I can due his homework.)) # 输出: I can do his homework.七、常见问题排查清单遇到报错不要慌按下面的清单逐项排查❌wordfreq相关报错说明依赖没装全执行pip install -r build/requirements.txt❌Java 相关报错确认java命令可用且版本与所用 LanguageTool 版本兼容脚本要求见源码描述部分❌提示xxx.dict不存在检查--tag_dict_path是否指向了正确的词典文件不同语言词典存放位置差异很大❌output.dump出现乱码脚本已内置chardet编码检测兜底若仍异常可手工检查源词典编码⚠️西班牙语规则异常记得按官方说明手工修正 XML 后再编译。八、结语自己动手解锁更多语言通过make_build_dir.pynlprule 不再局限于官方预置的三种语言。只要你找到对应语言的 LanguageTool 规则文件与词性词典理论上就能为任意语言构建一套 nlprule 资源。整个流程的核心就三步准备原料 → 运行脚本生成 build 目录 → 编译成二进制。动手试一次你会发现构建自定义语言资源比想象中简单得多。想深入研究的读者可以重点阅读 build/make_build_dir.py、build/chunker.py 与 build/README.md 三份文件它们共同构成了 nlprule 语言资源构建体系的完整图景。【免费下载链接】nlpruleA fast, low-resource Natural Language Processing and Text Correction library written in Rust.项目地址: https://gitcode.com/gh_mirrors/nl/nlprule创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表