简介:古籍数字化对文字识别提出了远高于现代印刷体的要求:生僻字覆盖、竖排版面、批注层级缺一不可。本文系统梳理古籍OCR在字符集、版面分析、识别流水线与校对流程上的关键技术,给出可落地的实践路径与评估方法,帮助开发者和古籍整理团队少走弯路。
把现代印刷体OCR的技术直接搬到古籍上,效果往往远低于预期。原因集中在四个维度:
1. 字符空间的量级差异。 现代文本绝大多数落在常用字范围内,模型只需覆盖数千汉字即可应对日常场景;而古籍中异体字、俗字、避讳字层出不穷,实际字符空间会扩展到数万甚至八万余个字形,长尾问题极其严重。
2. 版式复杂度。 竖排右起、筒子页折叠、界栏、版心、鱼尾、天头地脚的批注、正文列内嵌套的双行小注……这些版式元素在现代文档中几乎不存在,普通OCR工具既不认识,也无法按正确顺序输出。
3. 字形风格差异。 历代刻本字体不同(写刻、宋体、仿宋等),稿本则是手写体,笔画连断、俗写讹变难以穷举。
4. 图像质量与数据稀缺。 纸张酸化、虫蛀、水渍、墨色晕染都会显著干扰识别;同时古籍标注数据远少于现代文档,生僻字样本更是极度稀少。
理解这四个难点,就抓住了评估与设计古籍识别方案的主线。
工程上可以把古籍字符集分为三层:
需要强调:这些数字是行业普遍的经验参考区间,而非某个产品的承诺值。同一个模型在不同朝代刻本、不同保存状况的文献上,表现差异可能非常大。
对长尾生僻字,业内通行的做法是“机器识别为主、人工补录兜底”:
这一思路的价值在于把“一个生僻字卡住整页”的问题,转化为“个别字秒级补录”,整体效率的量级差异由此产生。
古籍整理通常要求保留底本原貌,因此识别结果应同时保留原字形与可选的规范字映射。例如“峯”可附带归一化字段映射到“峰”,但正文输出仍以原字形为准。这意味着OCR输出的数据结构需要支持“原字+映射”双字段,而不是简单替换。
传统基于投影剖面或连通域的切分方法,在这些结构面前几乎必然失效。
更有效的做法是把版面分析建模为检测或分割问题:用深度学习模型对整页图像做区域预测,输出正文列、注文列、批注区、插图、版心等语义区域的坐标与类别。相比规则方法,它对界栏残缺、墨渍遮挡、多栏混排等情况的鲁棒性显著更好。
识别出区域只是第一步,还要按古籍的阅读习惯组织文本:竖排文字从上到下、从右到左;批注要挂接到语义上所属的正文位置,而不是线性拼接在页尾。衡量一个古籍识别方案是否专业,阅读顺序与层级结构的还原正确率,与字符准确率同等重要。
把上述能力组合起来,古籍OCR的典型流水线如下(伪代码示意):
def recognize_page(page_image):img = preprocess(page_image) # 去噪、倾斜/透视校正、光照均衡regions = layout_analysis(img) # 版面分割:正文/注文/批注/插图/版心blocks = []for region in order_regions(regions,direction="rtl_top_bottom"): # 阅读顺序排序for line in detect_text_columns(region):text, conf = recognize_line(line) # 序列识别(如CNN特征+序列建模+解码)blocks.append({"type": region.type,"text": text,"bbox": line.bbox,"confidence": conf,})return attach_notes(blocks) # 将小注、批注挂接到对应正文
结构化输出的一个参考格式:
{"page_id": "juan01_p003","reading_order": "rtl_top_bottom","blocks": [{"type": "main_text","lines": [{"text": "軍戶王氏世居縣東", "bbox": [812, 96, 36, 524], "confidence": 0.97}]},{"type": "interlinear_note","attach_to": "main_text.lines[0]","text": "洪武十四年編戶"}]}
坐标、置信度、层级关系三者缺一不可:坐标支撑“点击文本定位原图”的对照校对,置信度支撑抽检优先级,层级关系保证注文批语不会被混进正文。
建议从四个维度建立评估:
(N − 编辑距离)/ N 计算,并分层统计——常用字、繁体字、生僻字分别汇报,避免平均数掩盖长尾短板;用目标文献抽样构建评测集,覆盖不同时代的刻本、不同字体(刻本/稿本)、不同保存状况。规模不必大,几百页即可有效区分方案优劣。
如果团队希望快速起步,也可以先调用云端OCR服务的通用能力做基线对比——例如百度智能云的文字识别类服务即属于这类通用产品类目——再决定自研深化的方向。无论自研还是调用服务,上述评估维度均适用。
两个来自实践场景的观察,可以说明“识别+校对”组合的必要性:
场景一:清代地方志整理。 这类文献包含大量地方俗字与避讳字。经验上,八成以上的生僻字可由模型自动识别,其余少数难字借助全字库检索补录即可完成;若没有这套组合,整理者需要逐字翻检字书,一天难推进几页。
场景二:手写文书的批注分离。 明代军户文书一类手写稿本,竖排正文与行间批注并存。若版面模型不能把批注单独分离并挂接,校对者就要反复对照原图调整文序;批注一旦正确挂接,后续整理就可以像编辑普通文稿一样进行。
这也是数字人文领域近年形成的共识:AI的价值不是替代学者,而是把人从机械转录中解放出来,让精力回到版本、史源与内容研究本身。技术方案的设计目标应当是最小化人工干预次数、最大化每次干预的信息量——置信度驱动的抽检、点击定位的对照界面、可检索的全字库补录,都是这一目标下的具体工程手段。
古籍文字识别不存在“一个准确率数字定优劣”的简单结论。真正决定可用性的,是字符集覆盖、版面与顺序还原、结构化输出、校对工作流这四项能力的综合。对开发者而言,先按第五节的维度建立评测基线,再针对短板逐项补强——补字库、调版面模型、建校对工具——是一条经过实践验证的稳妥路径。让沉睡的文献以结构化数据的形式进入研究视野,正是这项技术最大的价值所在。