简介:古籍数字化中,文字识别是效率瓶颈:异体字与避讳字远超现代字表规模,筒子页、双行小注等复杂版面又让通用OCR频频失准。本文系统拆解古籍识别的字符、版面、图像三重难点,梳理预处理、版面分析、识别与后处理的完整技术链路,并给出评估维度与人机协同实践建议,助力数字化项目科学选型、高效落地。
参与古籍数字化项目的人大多有同感:扫描不难,难的是把图像变成可检索、可引用的文本。一座图书馆动辄几十万册馆藏,若全靠人工录入,按每人每天数千字的效率估算,时间成本高到难以承受。因此,文字识别(OCR)环节的效率与质量,直接决定整个项目的投入产出比。然而把通用OCR直接搬到古籍上,往往“水土不服”。本文从字符、版面、图像三个维度拆解古籍识别的难点,梳理一条完整的技术链路,并给出评估与落地的实践建议。
现代中文信息处理的基础字符集规模有限:GB2312收录6763个汉字,《通用规范汉字表》共8105字,覆盖现代简体文本几乎没有障碍。但古籍是另一回事:《康熙字典》收字约4.7万,《汉语大字典》超过6万,《中华字海》收字8.5万余,这还不算历代抄刻过程中产生的俗字、讹字与避讳字。
具体而言,古籍用字的复杂性体现在三个层面:
这带来直接的工程后果:模型输出层面对的候选字符集可能是现代OCR的数倍以上,且类别严重不均衡——常见字样本充足、生僻字样本稀缺,模型对后者天然“欠学”。
古籍版面与现代书籍差异巨大,若不做针对性处理,即使字字识别正确,顺序也可能是乱的:
合格的方案必须把正文、注释、批语、版心文字切分为不同逻辑角色,并按古籍阅读习惯还原顺序,否则后续校对将付出巨大代价。
古籍扫描件的质量问题同样制约识别:纸张老化、霉斑、虫蛀造成大面积噪声与文字残缺;墨色洇散、笔迹粘连导致字符切分困难;装订成册的书页靠近书脊处弯曲,文字行呈弧形;纸张薄、墨透背,扫描时正反面文字互相干扰(俗称“透字”);拍摄时光照不均、页面歪斜。这些因素叠加,使预处理能力与识别模型的鲁棒性同等重要。
一条工程上可落地的古籍OCR链路,通常包含四个阶段。
这是古籍识别区别于普通OCR的关键环节。现代做法普遍基于深度学习:对页面做语义分割或目标检测,把每个区域分类为正文、双行小注、天头批语、地脚批语、版心、插图等类别,再按“先右后左、先上后下、先正文后注释”的规则输出阅读顺序。判断一个方案的版面能力,可拿一页带批注的刻本实测:双行小注是否被单独切出、批语是否标注为独立角色、输出顺序是否符合古籍阅读习惯。
流水线示意(伪代码):
for page in scan_pages(book):img = preprocess(page) # 二值化、去噪、倾斜/弯曲校正regions = layout_analyze(img) # 版面分割:正文/小注/批语/版心/插图for col in regions.order(right_to_left=True):boxes = detect(col)for ch in recognize(boxes): # 逐字识别并输出置信度output.write(normalize(ch))review_queue = [w for w in output if w.conf < THRESHOLD]# 低置信度字送人工校对,校对结果回流训练集
选型不能只看单点数字,建议从以下维度构建自己的评估体系。
指标设计:字符准确率(正确识别字符数/总字符数)是核心指标,但还应关注行级、页级准确率——页级准确率若不足,意味着频繁的人工干预;版面还原正确率(注疏是否分离、顺序是否正确)同样关键;此外要专门统计生僻字的识别召回,这往往是拉开差距的地方。
测试集构建:用项目实际要处理的文献构造测试集,覆盖不同朝代、版式(刻本/稿本/抄本)与保存状况,并人工录入标准答案。切忌只用清晰的影印再造善本测试——那不代表馆藏的真实水平。
工程能力考察:能否按批次处理成千上万页并支持断点续跑;是否支持带坐标的输出(便于图文对照校对)与结构化导出;是否提供校对工具、修改记录;对科研单位而言,能否开具正规发票、费用能否纳入科研经费科目,同样影响落地可行性。
先建基线再决策:一个务实的做法是先拿通用云OCR服务(例如百度智能云的文字识别类服务)在自建测试集上跑出基线,再评估专门方案相对基线的提升幅度,为“值得为古籍场景额外投入多少”提供客观参照。
在现有技术水平下,古籍识别不应追求“全自动”,而应设计好人机分工:
古籍文字识别的本质,是在字符规模、版面复杂度、图像质量三重约束下逼近人眼的认读能力。当前技术已经能把研究者从最繁琐的初转录工作中解放出来,但距离“免校对”仍有距离。对项目团队而言,与其迷信单点指标,不如把功夫花在测试集构建、版面还原验证与人机协同流程设计上——这三件事做扎实了,识别环节才能真正成为古籍数字化项目的加速器,而不是质量黑洞。