简介:古籍对OCR的要求远高于现代印刷文档:字符空间达十万级、版式竖排复杂、载体老化严重。本文拆解古籍文字识别的三大难点与四层技术栈,给出字符错误率、字库覆盖、版面还原、校对成本四组评估指标,并附可复现的数字化工作流与示意代码,帮助技术团队科学选型、高效落地古籍数字化项目。
近年来,AI 辅助古籍整理已成为业界共识,多家机构与平台都在推进古籍数字化实践。但很多团队的第一个体会是:在通用文档上表现良好的 OCR,搬到古籍上识别率往往明显下滑。原因不在“模型不够新”,而在于问题本身在三个维度上发生了质变。
《通用规范汉字表》收录规范汉字 8105 个,GB2312 标准收录 6763 个,这是现代中文文本处理的基本盘。但古籍面对的是另一个量级:《康熙字典》收字约 4.7 万,当代大型字书收字可达 8 万以上,Unicode 标准中的中日韩统一表意文字(含各扩展区)累计已超过 9 万个。
更麻烦的是异体字:同一个字可能有十几种写法,甚至同一部书内部都不统一;避讳字还会把常用字替换为缺笔、改形的特殊形态。这意味着识别系统的“输出空间”本身就必须是十万级的,且要具备字形级别的区分能力——这是绝大多数面向现代文本设计的通用 OCR 没有覆盖的。
现代文档以横排、单栏为主;古籍则以竖排右起为常态,还存在大量复杂变体:
“识别出文字”和“还原阅读顺序”是两件事。通用 OCR 通常按行输出,面对竖排右起、注文夹注的版式,输出顺序常常是乱的,后续人工梳理版式的时间可能超过校对文字本身的时间。
雕版刻本字形带有刀法个性,稿本、抄本是手写体且个人风格强;纸张酸化、虫蛀、水渍、墨色晕染、印章遮盖,都会显著降低图像质量。这些问题在现代办公文档中几乎不存在,却贯穿古籍识别全流程。
一套能用的古籍识别方案,通常由四层能力构成。评估任何外部工具或自建系统时,都可以按这四层逐项检查。
包括透视校正、去噪、二值化、界栏线去除、光照均衡。这一层常被低估,但对雕刻版面和老化纸张影响巨大。工程上的通行做法是:先用传统图像处理做粗校正,再用深度模型做细粒度增强。
这是古籍 OCR 与通用 OCR 差异最大的一层。主流做法是用目标检测或语义分割模型把页面切分为正文区、注文区、批注区、插图区、版心等语义单元,再依据“从右到左、从上到下、注文随正文”的规则重建阅读顺序。评估时要重点看两个能力:小字注文的检出率,以及复杂版式下顺序还原的正确率。
文本行识别的通用技术路线包括基于 CTC 的序列模型(如 CRNN 一类结构)和基于注意力机制的编码器—解码器结构。对古籍而言,关键不只是模型结构,而是训练数据:字库覆盖到哪一级(是否覆盖 Unicode CJK 扩展区的大量生僻字)、异体字样本是否充足、写本字形是否有足够标注。
识别结果可以再用语言模型纠错:古籍文本用词相对规范,n-gram 或预训练语言模型能有效纠正“形近错字”。此外应建立异体字映射表(识别字与规范字/原字的双向映射),便于检索与研究引用。这一层能把整体文本质量提升一个台阶,却常被忽视。
“识别率高”是一个含混的表述。严谨的评估至少应覆盖四组指标:
CER 计算示意:
def levenshtein(a: str, b: str) -> int:dp = list(range(len(b) + 1))for i, ca in enumerate(a, 1):prev, dp[0] = dp[0], ifor j, cb in enumerate(b, 1):prev, dp[j] = dp[j], min(dp[j] + 1, dp[j - 1] + 1, prev + (ca != cb))return dp[-1]def cer(ref: str, hyp: str) -> float:return levenshtein(ref, hyp) / max(len(ref), 1)
评估集的构造同样重要:应覆盖刻本/稿本/抄本、不同朝代、竖排/横排、有注/无注等维度,每类抽样足够页面,而不是只用几页“友好样本”。
一个可复现的古籍数字化流水线大致如下:
后处理环节示意(伪代码,接口名仅作示意):
def digitize_page(image_key: str) -> dict:img = load_from_object_storage(image_key)img = preprocess(img) # 纠偏、去污、二值化ocr = generic_ocr_client.recognize(img) # 调用通用文字识别服务lines = rebuild_reading_order(ocr.lines) # 按古籍规则重排行序for ln in lines:ln.text = variant_map.normalize(ln.text) # 异体字归一化return {"lines": lines,"to_review": [ln for ln in lines if ln.score < 0.9], # 低置信送人工}
无论选择外部方案还是自建系统,建议用以下清单逐项核对:
古籍识别的难点可以概括为一句话:字符空间大一个量级,版式规则另成体系,图像质量天然受限。因此,“识别率”必须拆解为字库覆盖、CER、版面还原、校对成本四组可验证的指标来评估;落地时则要依靠“预处理—识别—后处理—人工回流”的完整流水线,而不是寄希望于单一模型一步到位。对开发者而言,先用通用云 OCR 服务快速验证基线,再针对古籍语料做定向优化,是投入产出比最稳妥的技术路线。