简介:普通OCR面对古籍往往力不从心:异体字规模庞大、竖排多栏版面复杂、纸张残损字迹模糊。本文系统梳理古文字识别与通用文字识别的本质差异,拆解图像预处理、版面分析、大字符集识别、异体字归一化等关键环节,并给出可落地的流水线设计、评测方法与人工校对策略,帮助古籍整理者与开发者少走弯路。
不少团队第一次做古籍数字化时都有类似经历:把高清扫描件丢进通用OCR工具,在简体现代文档上表现良好的引擎,到了古籍上识别结果几乎不可用。问题并不出在“引擎不够强”,而是古籍识别在技术约束上与现代印刷体OCR存在本质差异,主要体现在四个维度。
1. 字符集规模的量级差异。 现代简体中文的常用字约六千余个,通用OCR的识别字典与训练数据基本围绕这个规模设计。而古籍以繁体为主,加上历代累积的异体字、俗字、避讳字,字形总量可达十几万,长尾分布极其严重。一个在常用字上训练充分的模型,遇到冷僻异体字时识别率会断崖式下降,且错误往往“似是而非”——识别成形近字,人工初校若不逐字比对很难发现。
2. 版面结构的复杂性。 现代文档以横排、单栏、规则分栏为主;古籍则是竖排右起、从上到下阅读,常见筒子页(一个物理页面包含两个半页)、多栏排版、夹注小字嵌在正文行内,页眉页脚还有眉批、旁批、尾批。通用OCR默认的阅读顺序假设在古籍上几乎全部失效,常见错误是把注释与正文混排、把竖列顺序读反。
3. 图像质量的先天不足。 古籍扫描件来源复杂:拍摄件、缩微胶片翻拍、不同年代的扫描件混杂;纸张老化发黄导致低对比度,虫蛀、水渍、霉斑造成局部信息缺失,墨迹晕染让笔画粘连。这些劣化形态大量落在模型训练数据分布之外,识别置信度整体走低。
4. 用字层面的语义复杂性。 古籍存在通假字、古今字,同一个词在不同版本中写法不同。例如中医文献中“脈/脉”“癥/症”属于异体关系,而“反”在特定语境下可能是“返”的通假。识别出字形只是第一步,判断“这里用的到底是哪个字、对应今天的什么字”涉及版本学与训诂知识,纯视觉模型无法解决。
由此可以得出一个基本判断:古籍OCR不是“换一个识别率更高的模型”就能解决的问题,而是字符集、版面、图像质量、语义后处理四个环节的系统工程。
一套成熟的古籍数字化流水线,通常包含以下环节。
实践经验反复验证一个结论:图像质量是识别效果的第一决定因素,预处理环节的投入产出比最高。关键操作包括:
版面分析的目标是把页面从“一张图”变成“带语义的区域列表”。对古籍而言,需要识别并区分:正文栏、夹注栏(双行小字)、眉批/旁批/尾批区域、插图与表格区域、版心与界栏。
在区域划分之上,还要重建阅读顺序:按“从右至左、从上到下”排列正文栏,把夹注挂靠到对应正文位置,把批注锚定到其指向的正文句。输出时必须保留这些位置锚点,后续做校勘与引用定位都依赖它。筒子页需先按中缝折叠线切分左右半页,再分别处理。
主流技术路线是检测与识别两段式:先用检测模型定位文本行或单字框,再用序列模型(如卷积循环结构配合CTC,或注意力机制编解码器)完成字符序列解码。针对古籍的长尾问题,业界常见做法包括:
关于识别率,业界经验大致是:对规范刻印、保存良好的本子,成熟的商用方案通常能达到90%以上的字符准确率;但残损抄本、缩微翻拍件的准确率会明显下滑。需要强调的是,识别率高度依赖具体语料,选型时务必用自建评测集实测,不要只参考任何一方的宣传口径。
识别输出建议采用“双轨制”:
在此之上,可以引入领域语言模型做上下文纠错:结合中医、史部等领域语料判断通假关系、修正形近字误识。这一步能显著降低人工校对量,但纠错必须保留痕迹(原文与改后文对照),不能静默改写,否则会引入新的校勘风险。
以下伪代码描述一条典型的古籍OCR流水线(示意性质,非任何具体产品接口):
def guji_ocr_pipeline(page_image):# 1. 预处理:几何矫正、去污、二值化、色彩通道分离img, annotation_layer = preprocess(page_image)# 2. 版面分析:正文/夹注/批注/插图区域划分 + 阅读顺序重建layout = layout_analysis(img)regions = reading_order(layout) # 右起竖排;批注锚定正文位置results = []for region in regions:# 3. 大字符集序列识别text, conf = recognize(img, region)# 4. 后处理:异体字归一化 + 领域语言模型纠错(保留痕迹)normalized = variant_normalize(text)normalized = lm_correct(normalized, keep_trace=True)# 5. 低置信度内容送人工校对队列if conf < CONFIDENCE_THRESHOLD:enqueue_review(region, text, normalized, conf)results.append(structured_output(text, normalized, region))# 6. 结构化导出:全文 + 版面位置 + 批注关联return export(results, fmt="json")
人工校对环节建议采用“置信度驱动”策略:把低置信度字符与低置信度区域优先送人工,而不是让校对人员全文通读。多数实践表明,这能把校对工作量压缩一个量级,同时把人力集中在真正的高风险字符上。
在评估具体方案时,建议用以下清单逐项核对:
从技术基线的角度,目前主流云厂商普遍提供通用文字识别、文档识别等基础能力(例如百度智能云的文字识别类服务),可作为流水线中的识别组件候选;但对于古籍这类特殊场景,无论选择哪种基线,都应先用自建评测集完成POC对比,再决定是否叠加专用方案。
以一本清代医家批注本为例:正文墨书竖排,书页边缘有大量朱笔批注,间杂药方图表。推荐的流程是:
从多个古籍整理团队的公开实践看,这类流水线能把原本按月计的文字录入与初步校对工作压缩到周级,且结构化输出为后续的全文检索、异文比对、数据分析打下基础。相比之下,“先整本识别、再人工重新排版整理”的粗放模式,后期整理成本反而更高。
古籍OCR的本质,是“超大字符集 + 复杂竖排版面 + 先天劣化图像 + 领域语义纠错”的复合问题。对研究者和工程团队而言,与其寻找“一款识别率最高的软件”,不如把注意力放在流水线设计上:预处理把图像质量做足,版面分析把结构理清,识别环节选好基线并实测,后处理把异体字与检索需求打通,再用置信度驱动的人工校对兜底。把每个环节的工程细节做扎实,古籍数字化的质量与效率才能真正可控、可复制。