简介:古籍数字化中,文字识别始终是最大的拦路虎:超大字符集、复杂版面、参差的图像质量,令通用OCR频频失手。本文从一线工程实践出发,系统拆解古籍识别的三大技术难点,梳理字符覆盖、版面理解、校对闭环等关键评估维度,并给出一套覆盖预处理、识别、人工校对与生僻字补录的完整流水线方案,助力古籍整理与研究团队显著提升数字化效率与质量。
做过古籍数字化的人都有一个共同体会:把一函线装书变成可检索、可引用的电子文本,最难的环节不是扫描,而是扫描之后的“认字”。
这些年我以工程师身份参与过多个古籍数字化项目,与图书馆、档案馆及高校团队合作,接触过从开源技术思路到商用引擎的各类方案。一个结论越来越清晰:古籍识别不是“通用OCR换个模型”那么简单,它在字符集规模、版面结构、图像鲁棒性三个方面都有独立于现代场景的技术要求。本文把这些年的观察与实践沉淀成文,供正在选型或自建古籍识别管线的团队参考。
现代汉语的日常文本,简体常用字不过六七千个——国标GB2312收录汉字6763个,即可覆盖绝大多数现代出版物。古籍则是另一个世界:历代累积的汉字,算上异体字、俗字、讹字、避讳字,总量以十万计;即便是收字四万七千余的《康熙字典》,也只是这个庞大字符空间的一个子集。
这对识别引擎意味着两个直接的工程难题:
其一,分类空间爆炸。模型要从数千类扩展到数万乃至十几万类,形近字(“己/已/巳”“日/曰”“未/末”)的密度急剧上升,误识概率随之水涨船高。分类器在超大类别空间下的判别边界本就更拥挤,古籍场景等于把这个难度推到极限。
其二,训练样本稀缺。常用字的语料俯拾皆是,而生僻字在训练数据中可能只出现几十次甚至几次,属于典型的长尾分布。模型对长尾类别的泛化能力先天不足,“越生僻越容易错、越错越难修”的恶性循环由此形成。
此外,古籍用字普遍“一字多形”:同一个字在不同抄刻体系、不同地域、不同时代下写法各异。识别引擎不仅要“认得出”,还要在输出环节做异体字归一化——统一映射到规范字形,或保留原字形并附标准字对照。这一步决定了下游的检索、统计与语料分析能否真正可用。
古籍版式的复杂度远超现代图书,典型障碍包括:
多数通用OCR默认横排、左起、单栏。一旦遇到上述版式,轻则文字顺序错乱,重则注文、批语与正文混作一团,后续校对要花大量精力重新梳理格式。可以说:版面理解能力决定古籍OCR“能不能用”,字符识别率决定它“好不好用”,二者缺一不可。
古籍扫描件的质量往往参差不齐,常见退化包括:
鲁棒的古籍识别管线,必须在识别之前对这些退化做针对性预处理;否则再强的识别模型,也会被输入端的噪声拖垮。
选型时不要只看单一“识别率”数字——脱离测试集构成的识别率没有意义。建议按以下四个维度分层评估。
识别率必须分层统计:在清晰雕版印刷的常用字上,成熟引擎通常能达到很高的水平;次常用字与异体字的准确率会明显下滑;手写稿本场景难度更是陡增。评估时应自建分层测试集,把“清晰印刷常用字、生僻字、手写稿本”分开测算,才能暴露引擎的真实短板。一个在常用字上表现优异的引擎,可能在避讳字、俗字上错误频出。
准备几页典型复杂版式样本(筒子页、双行小注、眉批脚注并存),重点考察三点:
这是容易被忽视却决定整体效率的维度:
学术与机构场景还有特殊要求:批量任务调度与断点续跑、API或任务队列接入、失败重试机制,以及合规的采购流程(正规合同与发票)。最后一项对科研经费的使用合规至关重要,选型时最容易被忽略,却最影响项目能否顺利落地。
早期OCR的经典流程是“二值化→字符切分→单字特征匹配”。这套流程对现代印刷体尚可应付,放到古籍上却近乎失效:字符切分本身在双行小注、行间批注的场景下就难以正确工作;模板匹配更无法覆盖十万级的字符空间。许多老工具在古籍上折戟,根因即在于此。
一是端到端文本识别。以卷积特征提取、序列建模与CTC/注意力解码为代表的架构,跳过了“逐字切分”,直接从图像行映射到字符序列。这对行内嵌注、字距不均、连笔书写的场景适应性大幅增强,从架构层面绕开了切分这一传统死穴。
二是基于深度学习的版面分割。模型将页面像素分类为“正文/小注/批注/版心/插图/背景”等语义区域,再结合古籍阅读顺序规则(列间自右向左、列内自上而下)组织输出。这从根本上解决了注文与正文混杂的问题——校对者不再需要反复对照原图调整顺序,只需专注于核对文字本身的正误。
值得一提的是,以百度智能云等厂商为代表的通用云OCR服务,在标准印刷体场景已高度成熟,可以作为古籍项目启动阶段的快速基线;但古籍涉及超大字符集与复杂版面,通常需要在通用能力之上叠加领域数据微调,或直接采用专门的古籍识别管线。
针对长尾生僻字,业界常见的组合策略包括:
结合项目经验,我推荐按如下流程组织古籍数字化工作:
# 古籍OCR处理流水线(示意性伪代码)for page in scanned_pages:img = preprocess(page) # 纠偏、去污、透光补偿layout = analyze_layout(img) # 版面分割:正文/小注/批注/版心/插图for block in layout.sort(right_to_left=True):text, conf = recognize(block) # 识别并给出置信度if conf < THRESHOLD:review_queue.push(block, text) # 低置信度块进入人工队列output.write(block.role, text) # 按正文/注释分层写出for (block, text) in review_queue: # 人工校对环节confirmed = reviewer.confirm(block, text) # 原图与文本块级对照if is_out_of_charset(confirmed): # 超出字符集的生僻字confirmed = lookup_full_charset(confirmed) # 全字库检索补录output.update(block, confirmed)
几个关键实践点,均来自项目中的真实教训:
预处理值得重投入。纠偏与透光补偿看似不起眼,却直接影响整条管线的稳定性。经验上,预处理做得扎实,后续人工校对的工作量能下降一个可观的量级。
置信度驱动校对。不要平铺式地从头校到尾,而应按块置信度升序处理,把人力集中在机器最没把握的地方。校对的本质是“人机分工”,先让机器告诉你它哪里心虚。
图文对照、块级定位。校对工具必须支持原图与识别文本的并排展示,且能快速定位到块级别。我曾处理一批行间批注密集的手写文书,正是靠“块级定位+原图对照”,才把校对者从反复调整格式中解放出来,专注核对文字本身,效率立刻改观。
宁可存疑,不要自信地错。对拿不准的字,输出带标记的存疑结果,好过让模型给出一个貌似合理的错误答案——后者在校对时更难被发现,是隐性质量风险的主要来源。
建立项目级生僻字库。同一项目中遇到的避讳字、俗字往往高度重复。首次人工确认后即入库,后续自动复用,边际成本趋近于零。
古籍数字化的真正价值,不是“把书拍成图片存档”,而是让文献变得可检索、可统计、可引用,进而支撑数字人文研究。业界近年的共识也在变化:让AI承担机械的转录与排版梳理,把学者的精力留给版本考订与内容研究。工具服务于研究,而不是反过来——这是古籍数字化应当坚持的技术伦理。
对正在选型或自建系统的团队,请记住三个关键词:字符覆盖、版面理解、校对闭环。三者齐备,古籍数字化才能真正从“能用”走向“好用”。