简介:古籍数字化是文史、中医等领域研究的基础工程,但普通OCR难以直接胜任。本文从字符集规模、版面结构、底本质量三个维度剖析古籍识别的核心难点,拆解预处理、版面分析、大字符集识别、语义校对四段式技术管线,并给出图像采集标准、效果评估指标与人机协同校对流程的实践建议,帮助研究团队高效完成古籍文本数字化。
做古籍整理的人几乎都经历过这样的落差:日常识别现代印刷体的OCR工具表现很好,可一旦对准古籍,竖排、繁体、批注、残损一拥而上,输出结果几乎不可用。问题不在“OCR技术不行”,而在古籍与现代印刷品之间存在巨大的“域差”。以《通用规范汉字表》为参照,现代日常用字约八千余个,字形规范、版式统一;而古籍文本中,历代传抄刊刻累积的异体字、俗字、避讳字总量可达数万乃至十万量级。理解这种域差,是选型、排期与质量把控的前提。本文系统拆解古籍文字识别的技术难点、工程架构与落地经验,供有古籍数字化需求的团队参考。
这是古籍识别区别于普通OCR的第一道坎,困难体现在两个层面:
其一,类别数量爆炸。识别模型本质上是一个多分类器,现代场景数千个类别即可覆盖绝大多数用字;古籍场景的输出空间扩张到数万级后,形近字混淆概率显著上升,训练所需的数据量与算力也水涨船高。
其二,异体字需要“识别+归一”两步处理。同一正字可能对应多个异体字形,如中医古籍中常见的“脈—脉”“癥—症”等对应关系。校勘场景下,系统不仅要认出原字,还要映射到标准字形,同时保留原始记录供研究者追溯底本用字。更进一步,古籍中大量存在通假字,例如中医语境中的“反”字,可能是“返”的通假,也可能取其本义。这类判断已超出字形识别范畴,必须借助上下文语义,否则校勘方剂名称、穴位名称时极易出现“一字之差、语义全非”的污染。
| 干扰类型 | 典型表现 | 对识别的影响 |
|---|---|---|
| 异体字 | 脈—脉、癥—症 | 需归一映射,且要保留原字记录 |
| 通假字 | 反/返、藏/臟 | 需结合语境判定,单靠字形无法区分 |
| 生僻字 | 人名、药名、古地名 | 类目稀缺、训练样本不足 |
古籍版式的复杂度远超现代书籍,常见形态包括:单栏、多栏与半叶分栏并存;双行小字夹注穿插正文;眉批、旁批、圈点遍布页面;朱墨双色批注与墨字叠压;图表与文字混排;筒子页带来的版心与书口结构。
对识别系统而言,真正的挑战是阅读顺序与归属关系:传统古籍从右至左、自上而下阅读,若版面分析按现代习惯排序列序,整页文本会系统性乱序;注释与正文若切分不清,后果比错字更严重,错字肉眼可查,而注释混入正文会悄无声息地污染录文。此外,页面边缘的大量朱笔批注与图表混排,还要求系统能按对应位置标注批注、准确切分图表区域。
古籍历经岁月,页面歪斜、透印、水渍、虫蛀、字迹洇散是常态;扫描环节控制不当,还会叠加摩尔纹、光照不均、装订阴影等新噪声。模型对噪声的鲁棒性,直接决定一个方案是“演示可用”还是“生产可用”。
一个严谨的古籍识别系统,通常可拆为四段:预处理 → 版面分析 → 检测识别 → 语义校对。
原始影像 → [预处理] → [版面分析] → [检测+识别] → [语义校对] → 结构化录文光照/二值化 区域分类排序 大字符集模型 词典+语言模型
目标是把千差万别的底本影像归一到模型可接受的标准输入,常见步骤包括:背景估计与光照补偿;自适应局部二值化(避免全局阈值抹掉暗部文字);基于投影或直线检测的倾斜校正;以及对朱墨批注本做颜色通道分离,把朱批与墨字拆成独立图层分别处理,这一步做不好,朱批极易被当作噪声丢弃。
def preprocess(page_image):img = normalize_illumination(page_image)angle = estimate_skew(img) # 投影/直线检测估计倾角img = rotate(img, -angle) # 回正ink_layer = extract_by_color(img, "black") # 墨字层note_layer = extract_by_color(img, "red") # 朱批层return binarize(ink_layer), binarize(note_layer)
目标是输出页面的结构化描述:哪些区域是正文、注释、批注、图表,并按古籍“从右至左、从上到下”的习惯排序。早期方案多依赖投影分析与连通域统计,对规则版面有效,但面对批注与图表混排就力不从心;当代主流做法是用卷积网络(目标检测或语义分割)在区域/像素级别做版面分类,再以规则或专门训练的排序模型确定列序行序。评估时应直接用最难的样本测试:多栏加夹注、页边带朱批、图表夹杂的页面,观察批注是否按对应位置标注、输出是否遵循右起顺序。
检测与识别可端到端联合,也可解耦为“文本行检测 + 行识别”两步,古籍竖排特性要求检测环节支持竖向文本行。识别环节的核心是大字符集建模,一般采用注意力式或Transformer类识别头,并配套三项工程组件:
从行业实践看,针对古籍优化的智能识别方案,整体字符准确率已普遍能做到90%以上;但规范刻本与模糊抄本之间的表现差距仍相当明显,这正是校对工作量差异的来源。
这一段往往决定最终可用性。思路是用领域语料(古籍全文、专业词典)训练或微调一个语言模型,对识别候选字做重排,让“上下文里应该是什么字”参与甚至主导“字看起来像什么字”的决策。例如通假字判定,单看字形“反”“返”置信度可能不相上下,但结合方剂服法上下文,语义模型可以给出倾向性判断并标记存疑,交由人工定夺。
识别效果的上限在采集时就基本确定。建议分辨率不低于300DPI,字迹细密的抄本善本建议300—600DPI;含朱批的底本必须彩色采集,灰度化会永久丢失颜色分层信息;页面尽量压平、控制装订阴影、避免强反光;采集时同步登记册、卷、叶、面等元数据,后期对账成本会大幅下降。
评估不要停留在“看着还行”,至少计算字符级准确率与基于编辑距离的字符错误率:
def cer(pred: str, truth: str) -> float:d = levenshtein(pred, truth) # 编辑距离return d / max(len(truth), 1)
评估集的构成比指标本身更重要:应覆盖规范刻本、写本抄本、批注本、残损本,并分类型报告指标,只报平均分会掩盖“刻本近乎全对、抄本骤降十几个点”的真相。
即便识别率很高,人文场景的校勘仍要求“最后一米”由人完成。可复用的流程是:按段落置信度分层,高置信段抽检、低置信段逐字核对;保留“机器录文”与“审定录文”双轨,差异点即校勘记;异体字造册登记映射关系,保证可回溯;校对中发现的专名错误回填领域词典,形成迭代闭环。
无论采购商用服务还是自建管线,建议按以下维度核查:
就方案形态而言:现代印刷品可直接使用主流云厂商提供的通用文字识别类服务(如百度智能云的通用OCR能力),开箱即用;古籍场景则建议优先考察面向古籍专门优化的大字符集方案,或基于开源识别框架在领域数据上微调自建,前者省心,后者可控,团队可按数据敏感度与预算取舍。
古籍数字化的本质,是把“认字”这门手艺拆解成可复制的工程管线:采集定上限、版面定结构、识别定效率、校对定质量。理解每一环的技术边界,才能做出清醒的选型与排期判断,接受“机器初校+人工精校”的现实分工,而不是幻想全自动化。随着大语言模型在古汉语语料上的能力持续增强,语义校对环节仍有明显发展空间,古籍整理的效率曲线远未到顶。