简介:通用OCR识别印刷体已相当成熟,面对古籍中的海量异体字、竖排多栏版式与残损页面却常常失效。本文从字符集、版面、图像质量三个维度拆解古文字识别的核心难点,梳理图像预处理、版面分析、大字符集识别与异体字归一化的完整技术链路,并给出扫描规范、评估指标与人机协同校对的落地建议。
现代中文OCR对印刷体的识别准确率已经很高,根本原因在于任务本身“友好”:常用简体字仅六千余个,字形规范、横排左起、版式统一,模型在海量语料上训练后足以覆盖日常场景。
古籍则是另一类问题,难点呈量级放大:
因此,古籍数字化不能简单套用“通用OCR接口+繁体字库”的组合,而要把它当作一条独立的工程链路来设计。下面逐一拆解。
通用中文模型通常基于常用字集训练:GB2312收录6763个汉字,日常场景覆盖率极高。而古籍领域完全不同:
对识别模型而言,这意味着分类类别数从“千级”跃升到“十万级”,且长尾分布严重——多数异体字样本稀缺,直接用通用模型微调很难收敛,必须依赖专门的古籍标注语料。
识别出字形只是第一步。古籍整理要求把异体字映射到标准字形,例如“脈→脉”“癥→症”。工程上通常维护一张“异体字—标准字”映射表,并配合上下文语言模型消歧:
成熟的做法是保留原字形+标注标准字形的双层输出,既满足检索需求,又不丢失版本信息——这也是校勘学对数字化的基本要求。
现代方案通常将版面分析建模为语义分割或目标检测问题,把页面切分为正文栏、批注栏、插图、版心等区域,再按“从右至左、从上到下”的规则构建阅读顺序图。正文与夹注必须建立对应关系:夹注属于哪一行正文、眉批对应哪一段,都要以结构化方式记录,否则后续校勘无法定位。
一个可参考的结构化输出设计如下:
{"page_id": "juan03_p012","reading_order": "right_to_left_vertical","regions": [{"type": "main_text","column": 2,"lines": [{ "text": "太陽之為病脈浮", "confidence": 0.98, "bbox": [412, 88, 460, 905] }]},{"type": "annotation","attached_to": { "column": 2, "line": 1 },"text": "脈,俗作衇","confidence": 0.93}]}
带坐标、置信度与归属关系的输出,是后续人工校对和数据库入库的基础。
实践中有几条经验阈值:
# 古籍页面预处理流程(伪代码)def preprocess(page):gray = to_grayscale(page) # 灰度化binary = adaptive_threshold(gray, block=31) # 自适应二值化,应对光照不均angle = estimate_skew(binary) # 投影/霍夫变换估计倾斜角fixed = rotate(binary, -angle) # 纠偏fixed = suppress_bleed_through(fixed) # 抑制背面透字return denoise(fixed) # 去除孤立污点噪声
预处理的目标不是“把图修好看”,而是稳定输入分布:二值化消除光照梯度,纠偏消除行列投影的锯齿,透字抑制降低负样本干扰。每一步都直接决定后续切分与识别的精度上限。
一条完整的古籍识别链路可以概括为五段:
选型或自研时,建议重点考察四个能力,而不是只看演示效果:
如果团队希望以云服务方式快速搭建,可以先在主流云厂商的通用文字识别能力上用小批量真实样本实测(例如百度智能云的文字识别服务),再针对古籍特有难点补充专用模型或开源方案组合,避免未经评测就全量上批。
经验上,字形规范的刻本在链路完整时字符准确率可以做到95%以上;抄本、稿本因书写随意性大,需要以人工校对兜底——这是行业现状而非算法缺陷,立项时就应纳入预期。
这套流程能把人工成本压缩一个数量级:机器解决95%以上的确定性工作,人只处理真正的疑难杂症。
古文字识别的本质,是把“图像里的字形”转化为“可检索、可校勘的结构化文本”,难点从来不是单点精度,而是字符集、版面、图像质量三条线的系统能力。落地时建议把握三条原则:扫描质量前置(300 DPI起步、彩色、控光)、链路完整(预处理—版面—识别—归一—校对缺一不可)、人机分工明确(置信度驱动的重点校对)。做到这三点,古籍数字化项目才能在保证学术严谨性的前提下,把整理周期从“按月计”压缩到“按周计”。