简介:甲言(Jiayan)是一款面向古汉语信息处理的自然语言处理工具包,专为文言文研究者、古籍爱好者及需要处理古典文献的开发者设计,用以弥补通用现代汉语NLP工具在文言文本上效果不佳的短板。当前版本支持文言词库自动合成、无词典分词、基于有向无环词图与动态规划的最大概率路径分词、词性标注、断句与标点等核心功能,并支持自定义词典构建,便于在古籍整理、文言文本挖掘等场景中直接调用。资源包共28个文件,以20个Python源码模块为主体,辅以txt依赖与说明、md文档、json配置及license等,压缩包约217KB,体量轻便、模块划分清晰,涵盖分词、词性标注、断句等子模块,便于按需阅读与二次开发。已有3321人学习下载,适合具备一定Python基础、希望快速上手文言NLP处理流程的读者参考使用。
1. 甲言是什么:给古文做“体检”的一套工具
你有没有读过那种没有标点、没有注释的文言文?一整段字挤在一起,光是断句就要猜半天。甲言(Jiayan)就是为这类文本准备的一套自然语言处理工具包,专门处理古代汉语——文言文、古文、古典汉语都算。它做的事情很具体:把一整段古文切分成词,给每个词标上词性,判断句子在哪里断开,再补上标点。通俗地说,它像一位熟悉古文的助手,帮你把“毛坯”状态的文本整理成结构清晰、可以继续分析的样子。对做古籍整理、文言文教学、古典文学研究的人来说,这类工具能省下大量手工标注的时间,也让后续的检索和统计成为可能。
2. 为什么古文需要专门的工具:现代分词器在文言文上会翻车
很多人第一反应是:分词不是早就有了吗,直接拿来用不就行了?问题在于,现代汉语和古代汉语的差别,远不止“之乎者也”这几个虚词。现代分词器是在新闻、口语、网络文本上训练出来的,它认识的词、习惯的切分方式,都带着强烈的现代语境。把它套到文言文上,翻车几乎是必然的。
2.1 单音节词为主,切分逻辑完全不同
现代汉语里“妻子”是一个词,指配偶;文言文里“妻子”往往是“妻”和“子”两个词,指妻子和儿女。现代分词器看到“妻子”会整体切出来,文言文的语义就被抹掉了。类似的还有“地方”(土地方圆)、“其实”(它的果实/那实际情况)、“可以”(可以凭借)等等。这类词在古代汉语里是高频结构,一旦切错,后面的词性标注、断句判断都会跟着错,错误会一层层放大。
甲言的设计前提就是承认这种差异:它面向的是以单音节词为主的古典汉语,词库和切分规则都按文言的实际情况来组织。这也是它和通用分词工具最根本的分野——不是精度高低的问题,而是“为谁设计”的问题。
2.2 没有标点,断句本身就是一道难题
现代文本天然带标点,分词器可以借助标点先粗切句子。古文没有这个便利,一整段话连成一片,哪里是一句、哪里是一顿,需要结合语法结构和语义来判断。甲言把“断句”和“标点”作为独立能力来做,正是因为这两步在古文处理里不是附属品,而是前置条件。断句错了,后面的分词和标注就失去了意义。
打个比方,现代文本处理像是给已经分好格子的书架贴标签,古文处理则要先自己判断哪里该放隔板。甲言做的,就是连隔板位置一起判断。
2.3 词库可以自己建,领域差异被正视
古文内部也不是铁板一块。先秦诸子、史书、诗词、明清小说,用词和句式差别很大。甲言支持词典构建和文言词库合成,意思是你可以根据自己的语料补充词条,让工具适配你手头的那批文本,而不是被迫接受一个通用词库。这一点对做专题研究的人很实用:处理某部典籍时,把该书的专有名词、特殊用法加进去,切分结果会明显更贴合。
提示:词库不是越大越好。盲目堆词条会让切分歧义变多,按语料范围逐步补充更稳妥。
3. 甲言的核心能力拆开看:分词、标注、断句、标点各管什么
把甲言的功能列出来不难,难的是说清每一步在整条链路里扮演什么角色。这四件事不是并列的四个按钮,而是有先后依赖的一组动作。
3.1 分词:把连续的字串切成有意义的单位
分词是整条链路的第一步。输入是一串没有空格的汉字,输出是切好的词序列。对文言文来说,这一步的难点集中在三类情况:单双音节并存(“于是”可能是“于”+“是”)、专名与普通词同形(人名、地名常与常用词撞车)、虚词黏连(“之”“其”“而”经常附着在别的成分上)。甲言按古典汉语的词库和规则来处理这些情况,切分结果会保留文言的实际结构,而不是强行套现代词形。
举个直观的例子,假设输入是“王曰善乃下令”,理想切分是“王/曰/善/乃/下令”。现代分词器有可能把“王曰”当成一个整体,或者把“乃下”误连。差别看起来小,但对后续标注影响很大。
3.2 词性标注:给每个词贴上语法身份
切完词,下一步是标注词性。文言文的词性比现代汉语更“活”:一个“雨”可以是名词也可以是动词(“雨雪”),一个“王”可以指君王也可以指称王。词性标注要结合上下文判断,单看词形往往不够。甲言提供 POS 标记能力,输出的是每个词在句中的语法角色,这对做句法分析、语义角色研究的人是基础数据。
需要说清楚的是,词性标注的准确率高度依赖词库覆盖和上下文规则。遇到生僻用法或罕见句式,标注结果可能需要人工复核。把它当成“初筛工具”而不是“最终答案”,心态会稳很多。
3.3 断句与标点:先判断边界,再补符号
断句和标点经常被混为一谈,其实是两步。断句是判断“在哪里停”,标点是决定“停的地方用什么符号”。古文里一个停顿可能是句号,也可能是逗号、顿号,取决于语气和结构。甲言把这两件事都纳入处理范围,先给出句子分段,再补上标点符号。
这一步的价值在于,它把“不可直接分析的长文本”变成了“可逐句处理的结构化文本”。做完断句标点,你才方便做逐句的词频统计、句式归纳、主题检索。顺序反了,先分词再断句,错误会互相干扰。
3.4 词典构建:让工具适配你的语料
词典构建是甲言比较有特色的一块。它允许使用者围绕自己的语料组织词条,支持文言词库的合成。实际使用中,这意味着你可以先跑一遍通用词库,看看哪些地方切错了,再把错切的词条补进去,重新跑一遍。这个“跑—看—补”的循环,是让工具逐渐贴合特定文本的常规做法。
| 能力 | 输入 | 输出 | 主要用途 |
|---|---|---|---|
| 分词 | 连续字串 | 词序列 | 为后续分析打底 |
| 词性标注 | 词序列 | 带词性的词序列 | 句法、语义研究 |
| 断句 | 无标点长文本 | 句子分段 | 逐句处理的前提 |
| 标点 | 句子分段 | 带标点文本 | 可读性与结构化 |
| 词典构建 | 自定义词条 | 适配语料的词库 | 提升特定文本切分质量 |
4. 容易搞混的几个概念:别把甲言当成万能古文翻译器
初学者接触这类工具时,最容易在几个相邻概念上打转。混淆本身不奇怪,因为这些词在日常语境里经常被混用,但在实际使用中,分不清会导致预期错位。
4.1 易混点一:NLP 工具包不等于翻译工具
很多人看到“处理古文”,第一反应是“能翻译成白话吗”。甲言做的是分词、标注、断句、标点,这些属于文本的结构化处理,不涉及语义翻译。它告诉你“这句话由哪些词组成、每个词是什么词性、句子在哪里断”,但不告诉你“这句话用现代汉语怎么讲”。把两者混为一谈,拿到输出会失望。区分方法很简单:看输出形态——输出是词序列和标记,就是分析工具;输出是通顺的现代句子,才是翻译工具。
4.2 易混点二:断句和标点不是一回事
前面提过,这里再强调一次,因为混淆频率实在高。断句回答“边界在哪”,标点回答“边界处放什么符号”。有的工具只做断句,输出用空格或换行表示分段;甲言把标点也纳入,输出更接近可读文本。使用时要清楚自己要的是哪一种:如果只是做句子级统计,断句结果就够;如果要生成可读版本,才需要标点。
4.3 易混点三:词性标注和语义角色标注是两层
词性标注给的是“这个词是名词还是动词”,语义角色标注给的是“这个词在句子里充当施事还是受事”。前者是语法层面,后者是语义层面。甲言提供的是 POS 标记,属于前一层。拿词性标注结果去推断语义角色,中间还差一步分析,不能直接画等号。
4.4 易混点四:通用词库和自建词库的适用边界
通用词库覆盖广,但对特定典籍的专名和特殊用法可能不够;自建词库贴合语料,但维护成本高,且容易过拟合到某一批文本。合理的做法是先用通用词库跑基线,再针对高频错误补充词条,而不是一上来就从头建库。这个顺序能帮你判断问题到底出在词库覆盖还是规则本身。
4.5 易混点五:工具输出和人工校勘的界限
古文里存在大量异体字、通假字、讹误,工具按词库和规则处理,遇到这些情况未必能给出正确结果。甲言的输出应视为“机器初稿”,人工校勘仍然必要。把工具结果直接当定稿,是使用这类资源时最常见的踩坑方式。
5. 什么时候该用甲言,什么时候别硬上
判断一个工具适不适合,比了解它有什么功能更重要。甲言的适用面其实有比较清晰的边界,越界使用,效果会打折扣。
适合用的场景,集中在“需要对古文做结构化处理”这一类任务上。比如整理一批没有标点的古籍文本,先做断句标点,让文本变得可读、可逐句引用;比如做文言文词频统计,需要先分词再计数,通用分词器的切分结果不符合文言实际,这时候专用工具的优势就出来了;再比如做词性相关的语法研究,需要每个词的语法身份作为基础数据。还有一类是教学场景:把一段古文的分词和标注结果展示出来,帮助学生理解句子的构成,比单纯讲解更直观。
不太适合硬上的场景也要说清楚。如果你要的是整段翻译,甲言不解决这个问题,硬用只会得到一堆标记而不是通顺译文。如果你的语料是现代汉语为主、只夹杂少量文言引文,用通用分词器可能更省事,专门上古文工具反而增加切换成本。如果文本破损严重、异体字和讹误极多,工具输出会大面积出错,这时候人工校勘的工作量并不会因为用了工具而减少,甚至可能因为要逐条核对而增加。
还有一个容易被忽略的边界:工具的效果和语料规模、词库质量强相关。拿一小段文本试跑,结果不理想,未必是工具不行,可能是词库没覆盖到那批文本的用词。合理的做法是先跑一批有代表性的样本,看错误集中在哪类词上,再决定是补词库还是换方案。
我自己的习惯是,每次拿到一批新语料,先抽十来句跑一遍,把切错、标错的地方记下来,看看是词库问题还是规则问题,再决定要不要继续投入时间调。这个“先小样本试跑”的动作,帮我省过不少白费功夫的返工。希望这套思路对你有用。
如果你手头正好有一批古文文本需要整理,这份甲言工具包的完整资料已经备好,按需取用即可。
本文还有配套的精品资源,点击获取