如何让文言文断句、分词、标点一次搞定:古汉语NLP工具甲言Jiayan上手全指南
【免费下载链接】Jiayan甲言,专注于古代汉语(古汉语/古文/文言文/文言)处理的NLP工具包,支持文言词库构建、分词、词性标注、断句和标点。Jiayan, the 1st NLP toolkit designed for Classical Chinese, supports lexicon construction, tokenizing, POS tagging, sentence segmentation and punctuation.项目地址: https://gitcode.com/gh_mirrors/ji/Jiayan
深夜十一点,周老师还在跟无标点的县志较劲
深夜十一点,某高校历史系的周老师还在跟一套没有标点的清代县志较劲:断句靠人眼,分词靠手写。第一周他还能凭文言功底逐卷推进,第二周就开始头昏眼花——直到同事发来一个项目链接:甲言Jiayan,一个专门为古汉语设计的 NLP 工具包,覆盖文言词库构建、智能分词、词性标注、自动断句与标点五大能力,正好解他的燃眉之急。
从"手忙脚乱"到"无标点文本不再可怕"
周老师的处境,是许多古籍研究者、文史学者和文言文教师的日常缩影。
你大概率也经历过类似的流程:OCR 扫描件错字连篇;校对完成后发现文本仍是连续汉字,得手动加标点;分词之后还要逐个核对词性,几千字下来眼睛发花。更无奈的是,把这段文言丢给常用的现代汉语 NLP 工具,结果往往让人哭笑不得——"内圣外王"被切成了"内/圣/外/王之道",一个完整的固定表达被拆得七零八落。
通用工具并非不好,只是它们大多以现代汉语语料为核心训练,面对文言文中大量虚词、活用和特殊句式,往往力不从心。正是看到这个空白,甲言选择了一条少有人走的路:把词库构建、分词、词性标注、断句、标点五个环节,全部围绕古汉语重新设计。
专为古汉语而生的 NLP 工具包,能解决什么
甲言取自"甲骨文言"之意,目标很朴素:让机器学会处理刻在龟甲兽骨上的古老文字。作为首个专门针对古汉语打造的 NLP 工具包,它把文言处理的关键环节串成了一条完整流水线:
- 文言词库构建:以无监督方式从语料中自动发现词汇;
- 智能分词:提供 HMM 字符级模型与 N-gram 词级最大概率路径两套算法;
- 词性标注:基于 CRF 的序列标注,配合专为古汉语设计的词性标签体系;
- 自动断句与标点:识别句读位置,并在断句基础上补齐现代标点。
一句话概括:拿到一段没有标点的文言文,从"哪里该断"到"每个词是什么词性",甲言都能先给你一份可用的初稿,剩下的交给人工校对。
它凭什么比通用工具更懂古文
两套分词方案,按需选用
分词是古文处理的"地基"。甲言给出两种思路:字符级 HMM 分词把切词看作给每个字打标签的序列问题,借助语言模型估算字与字的组合概率,再用维特比算法求出最优切分,官方公布在标准测试集上的准确率为 92.3%,是项目推荐的主用方案;N-gram 词级最大概率路径分词则在候选词图中寻找概率最大的切分路径,颗粒度更细。前者贴合语感,后者适合需要逐字信息的分析场景,你可以按需切换。
断句与标点:把"句读"翻译成现代标点
无标点是古籍最大的门槛。甲言用两套 CRF 模型解决:断句模型在字符级别判断句读位置,特征中引入点互信息与 t 检验值,帮助模型判断字词黏合度;标点模型采用层叠式 CRF,在断句基础上进一步决定每个停顿处该用逗号、句号还是感叹号。项目公布的标准测试集断句 F1 值为 89.7%,标点准确率为 87.2%,意味着大部分句读位置能被准确还原,人工校对量大幅下降。两个模型对应实现见 jiayan/sentencizer/crf_sentencizer.py 和 jiayan/sentencizer/crf_punctuator.py。
词性标注:为古汉语量身定制的标签体系
词性标注同样基于 CRF,准确率 88.5%。比数字更值得关注的是它的标签设计:共 27 类,除了常见的动词 v、形容词 a、副词 d,还细化了名词家族(人名 nh、地名 ns、时间词 nt、方向词 nd),并专门为文言虚词预留了类别,如助词 u(之、所)、语气词 e(哉、兮)等。完整词性表见 jiayan/postagger/README.md,实现见 jiayan/postagger/crf_pos_tagger.py。对于研究古代汉语语法的用户,这套标签比通用标注更有分析价值。
同一句话,三种工具的差距一眼可见
口说无凭,拿《庄子》里一句话实测。原文:
是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。
甲言 HMM 分词结果中,"内圣外王"被作为一个完整概念保留:
['是', '故', '内圣外王', '之', '道', ',', '暗', '而', '不', '明', ',', ...]而通用工具 LTP(3.4.0)的输出里出现了"故内""圣外王""暗而不明"这类奇怪组合;另一款主流工具 HanLP 则切成"是故/内/圣/外/王之道"。差距在哪里?甲言知道"内圣外王"是古文里的固定表达,通用工具却只能按现代汉语的习惯硬切。对研究者而言,前者可以直接进入词频统计,后者得先花时间修正。用数据说话,差距会更直观:
| 能力 | 甲言Jiayan 表现(官方数据) | 通用汉语工具常见水平 |
|---|---|---|
| 古汉语分词准确率 | 92.3% | 通常低于70% |
| 词性标注准确率 | 88.5% | 通常低于60% |
| 断句 F1 值 | 89.7% | 无对应能力 |
| 自动标点准确率 | 87.2% | 无对应能力 |
五分钟跑通第一个文言处理任务
上手成本比你想象的低。先克隆代码、安装依赖:
git clone https://gitcode.com/gh_mirrors/ji/Jiayan cd Jiayan pip install jiayan此外还需安装 kenlm 语言模型库,具体安装命令以 README 说明为准。接着按 README 指引下载预训练模型,四个文件各司其职:
| 模型文件 | 用途 |
|---|---|
| jiayan.klm | 语言模型,用于分词及断句标点的特征提取 |
| pos_model | CRF 词性标注模型 |
| cut_model | CRF 断句模型 |
| punc_model | CRF 标点模型 |
然后,几行代码完成一次分词:
from jiayan import load_lm, CharHMMTokenizer lm = load_lm('jiayan.klm') tokenizer = CharHMMTokenizer(lm) text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。' print(list(tokenizer.tokenize(text)))断句和标点分别对应CRFSentencizer与CRFPunctuator,词性标注使用CRFPOSTagger,完整可运行示例都在 jiayan/examples.py 里,照着改就能用。
进阶:让工具更贴合你的语料
跑通基础流程后,你会发现甲言还有不少挖掘空间。
用自定义词典补充领域词汇
如果文本领域性很强——比如医书、法典、农书,可以加载自定义词典兜底,把专业词预先喂给模型,分词准确率往往立竿见影。
生僻字与批量文本的预处理策略
生僻字多的文本,建议先用 jiayan/utils.py 提供的字符规范化与文本清洗工具做预处理。处理超长语料时,坚持"分段处理"原则,单批控制在 5000 字以内,配合批量接口逐段推进,整部古籍也能稳定跑完。
用 PMI 与熵值自动构建文言词库
这是甲言很有特色的一项能力:不依赖人工标注,用点互信息(PMI)评估字与字之间的黏合度,用左右邻接熵评估一个词在不同语境中的独立性,从而从纯语料中自动发现词汇。拿《庄子》全文跑一遍,就能得到带词频、PMI、左右熵的结构化词库:
from jiayan import PMIEntropyLexiconConstructor constructor = PMIEntropyLexiconConstructor() lexicon = constructor.construct_lexicon('庄子.txt') constructor.save(lexicon, '庄子词库.csv')实现见 jiayan/lexicon/pmi_entropy_constructor.py。构建出的词库既能反哺分词,也能直接当专业词典用,对"从零研究某部古籍"的场景尤其顺手。
🎯 谁在用甲言:三个场景速览
- 古籍数字化与整理:OCR 出文本 → 甲言断句标点 → 人工校对 → 输出可检索电子版。原本按天计算的工作,可以压缩到以小时计。
- 文言文教学辅助:老师用甲言快速生成带分词的课文材料,学生实时查看"哪个词是助词、哪个词是名词活用",语法讲解有了可视化抓手。
- 历史文献研究:词频统计、共现分析、风格识别都依赖分词和词性标注,甲言为这类统计研究提供了可靠的前置步骤。
❓ 你可能想问的四个问题
Q:能直接处理繁体文本吗?A:当前版本受训练语料限制,主要面向简体。可以先借助 OpenCC 转成简体再处理,得到结果后再转回繁体。
Q:古籍太长,会不会跑不动?A:把长文本拆成段落,每批不超过 5000 字,用批量接口逐段处理,是目前推荐的做法。
Q:分词效果还能再提高吗?A:有三招值得尝试:用自定义词典补充领域词汇;调整分词算法的相关参数;用你自己的语料对模型做针对性微调。
Q:支持哪些古籍类型?A:经史子集、诗词歌赋、历史典籍等各类文言文献都能处理;特定类型文本建议用对应语料微调,效果更佳。
写在最后:让古籍在数字时代被重新读懂
工具的价值,不只是"省时间"三个字。当断句、分词、标点这些机械劳动交给机器,研究者才能把精力放回真正重要的地方:文本背后的义理、历史的脉络,以及那些等待被重新发现的思想。文白翻译等功能也正在陆续开发中,古汉语数字化的路会越走越宽。
如果你手头正压着一部没有标点的古籍,或者正在为一堂文言文课准备素材,不妨从甲言开始——克隆仓库、装好依赖、下载模型,然后把你熟悉的那段古文交给它。试着跑一次分词,你会发现,让文言文"开口说话",比想象中简单。
【免费下载链接】Jiayan甲言,专注于古代汉语(古汉语/古文/文言文/文言)处理的NLP工具包,支持文言词库构建、分词、词性标注、断句和标点。Jiayan, the 1st NLP toolkit designed for Classical Chinese, supports lexicon construction, tokenizing, POS tagging, sentence segmentation and punctuation.项目地址: https://gitcode.com/gh_mirrors/ji/Jiayan
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考