十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用古汉语NLP工具甲言Jiayan,把无标点古籍分词、断句、标点一次搞定

如何用古汉语NLP工具甲言Jiayan,把无标点古籍分词、断句、标点一次搞定 如何用古汉语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工具包正是为这个场景而生的。为什么值得你花十分钟了解它通用汉语NLP工具几乎都以现代汉语为训练语料遇到内圣外王之道这类句子就开始犯迷糊而甲言从设计之初就只做一件事——处理文言文。它用词库构建、分词、词性标注、断句、标点五个模块把古籍数字化的整条流水线全部包圆。换句话说读文言文这件事从人力苦工变成了一行 Python 代码。先解决切哪里古汉语自动分词的两套算法分词是所有下游任务的起点没有它就没有词频统计和语义分析。甲言内置了两套方案字符级 HMM 分词器CharHMMTokenizer加载 kenlm 语言模型把某个字是词的哪个位置当作序列标注问题用维特比算法求解最优路径。效果最贴合文言语感官方推荐优先使用。词级 N-gram 分词器WordNgramTokenizer基于有向无环词图与最大概率路径颗粒度较粗但胜在不需要额外下载语言模型。同一个句子三家工具的表现天差地别。输入是故内圣外王之道暗而不明郁而不发通用工具给出的结果是是故/内/圣/外/王之道或故内/圣外王/暗而不明而甲言输出的是干净的内圣外王 / 之 / 道 / 暗 / 而 / 不 / 明。哪个更符合文言语感一眼便知。没有文言词典让工具自己造一个古籍研究最大的痛点之一是市面上没有现成的文言词库。甲言干脆把这件事也解决了位于 jiayan/lexicon/pmi_entropy_constructor.py 的PMIEntropyLexiconConstructor用双字典树统计词频用点互信息PMI衡量字与字的结合紧密度再用左右邻接熵判断词汇在上下文中的独立性全程无监督不依赖任何标注数据。把《庄子》全文喂给它它会自动吐出一张结构化词表WordFrequencyPMIR_EntropyL_Entropy天下280195.25.165.25万物94377.64.604.54仁义58882.33.504.97老聃452281.22.382.43注意老聃这类专有名词也被自动抓了出来说明 PMI熵 这套组合拳在文言语料上相当有效。生成的 CSV 词表还可以反过来配合分词模块使用形成造词→分词的闭环。最难啃的骨头无标点长文的断句与标点没有句读的古文对现代模型是巨大的挑战——词与词、句与句之间没有任何显式边界。甲言把这一环拆成了两步断句基于字符级条件随机场CRF的序列标注把这一处是否该断当作二分类问题并额外引入 PMI 与 t-检验值作为特征捕捉字对之间的黏合强度。标点在断句结果之上再用层叠式 CRF 判断该加逗号、句号还是感叹号。把一段连标点都没有的《庄子·天下》长文丢进去输出是这样分句的天下大乱 → 贤圣不明 → 道德不一 → 天下多得一察焉以自好 → 譬如耳目 → 皆有所明 → ...再进一步标点模块直接还给一段能读的文本天下大乱贤圣不明道德不一天下多得一察焉以自好……悲夫百家往而不反必不合矣……道术将为天下裂。断句准确悲夫这种感叹句也能配上感叹号——这正是古籍研究者最想要的能力。词性标注给每个词贴一张语法身份证读懂文言文光分词还不够还要知道每个词在句子里扮演什么角色。甲言的CRFPOSTagger见 jiayan/postagger/crf_pos_tagger.py使用词级 CRF 进行序列标注并针对文言文定制了 30 个词性标签除了常规的名词n、动词v、形容词a还专门设计了语气助词、时间名词、人名地名等类别。words [天下, 大乱, , 贤圣, 不, 明, , 道德, 不, 一, ] postagger CRFPOSTagger() postagger.load(pos_model) print(postagger.postag(words)) # [n, a, wp, n, d, a, wp, n, d, m, wp]天下是名词、大乱是形容词、不是副词、一是数词——标得清清楚楚。完整的词性表定义在 jiayan/postagger/README.md如果你想做历时词汇研究或语法分析这张表就是你的参照系。一次真实对照同样一句话谁更懂古文项目 README 里记录了一组直观的对比。对是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方LTP (3.4.0)是 / 故内 / 圣外王 / 之 / 道 / 暗而不明 / ...HanLP是故 / 内 / 圣 / 外 / 王之道 / ...甲言 HMM是 / 故 / 内圣外王 / 之 / 道 / 暗 / 而 / 不 / 明 / ...通用工具要么把故内硬凑成一个词要么把王之道粘在一起。甲言则把「内圣外王」这个核心概念完整切出虚词之而单独成词颗粒度既细又符合语感。作者也坦承随着 HanLP 2.x 引入大规模预训练模型通用工具在古文上的表现已有大幅提升——但甲言作为第一个为古汉语定制的 NLP 工具包其方法论和模块设计至今仍有独特价值。三分钟上手跑通你的第一段古文第一步安装pip install jiayan pip install kenlm # 语言模型运行时依赖注意安装要分两步完成确保拿到较新的 kenlm 版本具体说明见项目 README。第二步准备模型从项目 README 提供的网盘链接下载预训练模型并解压放到你的工作目录。核心是jiayan.klm语言模型分词、断句、标点都要用到其余可选pos_model词性标注、cut_model断句、punc_model标点。第三步跑起来from jiayan import load_lm, CharHMMTokenizer lm load_lm(jiayan.klm) tokenizer CharHMMTokenizer(lm) tokens list(tokenizer.tokenize(是故内圣外王之道暗而不明郁而不发)) print(tokens)完整可复现的示例全部集中在 jiayan/examples.py——词库构建、两种分词、断句、标点、词性标注、模型训练一个文件看全。从安装到看到第一行输出三分钟绰绰有余。避坑锦囊新手最容易踩的 5 个坑漏装 kenlmpip install jiayan装完直接跑会报ImportError。先装好 kenlm 再加载.klm模型顺序不能反。模型路径对不上load_lm(jiayan.klm)用的是相对路径务必把模型解压到当前工作目录或改成你的绝对路径否则直接FileNotFoundError。处理繁体文本受训练语料限制甲言目前不支持繁体中文。先用 OpenCC 把繁体转成简体处理完再转回去。超长文本一次性硬塞断句、标点模块对超长输入不友好。建议把长篇古籍按段落分批处理每批控制在几千字内再拼接结果。两种分词器混着用CharHMMTokenizer需要加载jiayan.klmWordNgramTokenizer不需要模型但颗粒度更粗。想追求效果用前者只想快速试用用后者别期待它们输出完全一致。回到开篇让古籍研究回到它本来的样子还记得深夜灯光下的那本《庄子》吗有了甲言你可以把机械的断句、标点、分词交给它把省下来的时间留给真正重要的问题——这句话为什么这么说这个思想如何演变两千年前的文字终于可以以它本来的样子被高效地阅读、检索和分析。下一步行动很简单克隆仓库git clone https://gitcode.com/gh_mirrors/ji/Jiayan或者直接pip install jiayan再下载模型跑通 jiayan/examples.py。遇到问题就去提 issue作者和社区都在等你的反馈。古汉语的数字化才刚刚开始。而你完全可以成为第一批把这条路走通的人。【免费下载链接】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),仅供参考
返回列表