简介:本文聚焦古籍数字化中最核心也最困难的文字识别环节,系统分析繁体字、异体字、避讳字以及破损模糊影像带来的识别挑战,剖析通用OCR在古籍场景失效的技术根因,并给出一套涵盖图像预处理、版面分析、大字符集识别、自动标点与人机协同校对的完整工程方案,帮助古籍整理与人文计算团队构建高准确率、可持续迭代的识别流水线。
做过古籍数字化的人大多有一个共识:影像扫描、存储管理、元数据标引等环节如今都有成熟方案,真正的瓶颈几乎都集中在文字识别上。原因可以归纳为三类:
1. 用字规模远超现代文本。 现代汉语常用汉字大约六七千个,即可覆盖99%以上的日常文本;而历代传世古籍中的用字,仅异体字、俗体字就以万计,再加上避讳字、碑刻别体、帖写变体,实际需要处理的字符空间比现代文本大一到两个数量级。这意味着识别系统的“候选类别数”本身就完全不是一个量级。
2. 载体与影像质量先天不足。 古籍多为雕版刻本或写本,纸张老化、虫蛀、水渍、霉变、墨迹漫漶是常态;即使使用高精度扫描设备,也无法还原已经缺失的笔画。部分页面还存在版框残缺、字口磨损等问题,这些都会直接拉低识别准确率的下限。
3. 版式与书写习惯复杂。 竖排右起、无标点、夹注小字、双行小注、朱墨套印、眉批评语、栏线界行——这些排版特征在现代OCR“横排、有标点、单栏”的默认假设下全部失效。
在人工模式下,研究员逐字对照善本辨认,一页古籍往往需要几十分钟,且准确率高度依赖个人学术素养;而直接套用通用OCR工具转写,又会频繁错认漏认,一页校对下来的时间成本甚至高于重新录入。因此业界逐渐形成共识:古籍识别必须走“领域定制的技术流水线 + 人机协同”的路线,而不是指望某个通用工具包打天下。
要构建可用的方案,先要弄清通用OCR为什么失准。归纳起来主要有五点:
针对上述问题,一套经过多个数字化项目验证的工程方案,通常包含四个层次。
竖排右起的古籍需要专门的列检测与列序恢复算法;对双行小注、眉批,应输出带层级结构的版面树,而不是拍平成一维文本流。这一步直接决定下游文本的可读性与可校对性,是经常被低估的环节。
识别只是第一步。面向学术研究使用,还需要基于预训练语言模型的自动标点(序列标注任务)、异体字归一化映射(在保留原字形的同时提供通行字对照),以及对改写行为严格受限的领域语言模型纠错。
示意性的流水线伪代码如下:
def ancient_book_ocr(page_image):# 1) 图像预处理img = deskew(page_image) # 倾斜校正img = adaptive_binarize(img) # 自适应二值化img = remove_frame_lines(img) # 剔除版框与界行# 2) 版面分析:竖排列切分 + 阅读顺序恢复 + 版面树构建layout = analyze_layout(img, writing_mode="vertical_rt2lf")# 3) 识别:大字符集模型,同时输出字符与置信度ocr_out = recognize(layout, charset=ANCIENT_CHARSET) # 数万级字符集# 4) 后处理text = normalize_variants(ocr_out.text) # 异体字归一化,保留原字形对照text = lm_constrained_correct(text) # 领域语言模型受限纠错text = auto_punctuate(text) # 自动标点return text, ocr_out.char_confidences, layout
其中异体字归一化通常维护一张由专业校对持续扩充的映射表:
VARIANT_MAP = {"峯": "峰", # 异体字归一"禮": "礼", # 繁简对照(按研究需要决定是否保留原字形)"萬": "万",}def normalize_variants(text: str) -> str:return "".join(VARIANT_MAP.get(ch, ch) for ch in text)
再好的模型也无法保证百分之百正确,而古籍整理对文本质量的要求极高,因此校对环节必须工程化设计:
一个最小的字符准确率计算示意:
def char_accuracy(ref: str, hyp: str) -> float:"""基于编辑距离的字符级准确率"""m, n = len(ref), len(hyp)dp = list(range(n + 1))for i in range(1, m + 1):prev, dp[0] = dp[0], ifor j in range(1, n + 1):cur = dp[j]dp[j] = min(dp[j] + 1, # 删除dp[j - 1] + 1, # 插入prev + (ref[i-1] != hyp[j-1])) # 替换/命中prev = curreturn 1 - dp[n] / max(m, 1)
对中小规模团队而言,自建全套基础设施成本较高,合理组合通用云能力是更现实的选择:
需要特别强调的是:选型时不宜只看厂商宣称的通用识别率数字,而应使用自有古籍样本做小规模盲测,按字符准确率、版面顺序正确率、生僻字覆盖率三个维度横向对比,这才是可复现、可决策的评估方式。
古籍识别没有“一键搞定”的银弹,它的准确率来自一项系统工程:领域语料与大字符集模型解决“认得出”,版面分析解决“读得对”,自动标点与归一化解决“用得上”,人机协同校对解决“信得过”。随着多模态大模型技术的发展,图文理解能力正在为破损字形的推断、残缺上下文的补全提供新的可能,但“模型输出 + 专家校验 + 数据闭环”的基本范式,在可见的周期内仍会是古籍数字化团队的主流工作方式。对准备投入这项工作的团队而言,尽早建立量化评估体系与校对数据回流机制,比追逐某个单点工具更能决定项目的长期成败。