简介:古籍数字化是中医文献整理与文史研究的基础工程,但通用OCR面对繁体异体字、竖排多栏与朱笔批注时往往力不从心。本文围绕字符集覆盖、字形规范化、版面分析、阅读顺序重建与图像质量控制五大环节,系统梳理古籍文字识别的技术难点与可落地的工程方法,帮助科研团队显著压缩逐字校对的工作量,提升数字化效率。
做过中医古籍整理的人,多半经历过这样的场景:把一部明清刻本扫描进电脑,交给现成的OCR工具处理,输出的不是成片的缺字,就是顺序颠倒的乱码——竖排文字被按横排逻辑切散,批注混进正文,双行夹注彻底丢失。问题的根源不在“识别算法不行”这么简单,而在于通用OCR的三个基础假设与古籍场景全面错位:
字符集假设。 通用方案面向现代规范文本,常用简体字规模约六七千字(GB2312收录汉字6763个),模型的分类空间与训练语料基本围绕这一量级构建;而古籍用字远超此数——《康熙字典》收字四万七千余,《中华字海》收字八万五千左右,其中包含大量异体字、生僻字与避讳字。输出空间没有覆盖到的字,模型连“猜”的资格都没有。
版面假设。 现代文本默认横排、左起、单栏、图文分块;古籍却是竖排、右起,还叠加筒子页、版心、上下双栏、小字双行夹注、眉批旁批等结构。版面分析模块一旦沿用“从左到右、从上到下”的阅读假设,输出顺序必然错乱。
成像假设。 通用OCR的训练图像多为清晰的现代印刷品;古籍则是纸张老化、墨迹漫漶、虫蛀残损、透光阴影、装订中缝变形的组合,噪声分布完全不同。
理解这三个错位,也就理解了古籍文字识别的四个主攻方向:扩大字符覆盖、字形规范化、版面结构解析、成像质量治理。下面逐一展开。
技术上的第一道门槛是分类空间。业界方案普遍以Unicode的CJK统一表意文字及其扩展区为输出空间,合计覆盖约九万个表意文字编码位,基本容纳古籍常见字形。选型或自建方案时需要确认两点:一是输出空间是否覆盖CJK基本区与常用扩展区;二是训练语料中古籍字形(刻本楷字、抄本手写体)的占比——这直接决定生僻字和手写体的召回能力。
古籍文本里,同一个字往往有多个写法:“脈”与“脉”、“癥”与“症”、“薑”与“姜”是中医文献中的高频异体对。识别引擎即便正确切分出字形,若不做事后规范化,检索和统计仍会被拆散——同一个方剂名会以两三种字形出现在数据库里。
工程上,这通常通过“异体字映射表 + 后处理”解决,示意代码如下:
# 识别结果后处理:异体字规范化(示意)VARIANT_MAP = {"脈": "脉", "癥": "症", "薑": "姜","眎": "视", "眡": "视", "涖": "莅",}def normalize(text):return "".join(VARIANT_MAP.get(ch, ch) for ch in text)
真实项目中,映射不能简单一对一硬替换。中医语境下大量存在通假字:同一个“反”字,既可能是本义,也可能是“返”的通假;“藏”在“五藏”中通“脏”。这类判断依赖上下文。比较务实的做法是:原始字形与规范化文本分列入库,通假关系留给人工校对环节标注,为后续版本校勘和词频统计留下依据。
中医古籍中的方剂名、药名、穴位名构成高密度专业词表。把它作为识别后处理的约束词典(例如优先匹配“小柴胡汤”而非形近的错字组合),能显著压低专有名词的错误率。这一步成本低、收益高,是自建流水线时最值得优先投入的模块之一。
古籍版面有自己的结构语法:一张纸对折形成筒子页,中间是版心;文字竖排成列,阅读从最右侧一列开始、自上而下,读完一列再向左移;双栏刊刻时上下两栏各自成文;注文常以小字双行嵌入正文列内(夹注);批注出现在天头(眉批)、页边(旁批),甚至以朱墨套色呈现;图表、穴位图穿插其间。通用版面分析把这些结构一律当“文本块”处理,正是批注与正文混淆、顺序错乱的直接原因。
检测出列之后,需按古籍阅读逻辑重排,示意逻辑如下:
def rebuild_reading_order(columns):# 古籍从右至左阅读:按列左边界横坐标降序排列ordered = sorted(columns, key=lambda c: -c.bbox.x0)# 列内字符按纵坐标升序拼接for col in ordered:col.chars.sort(key=lambda ch: ch.bbox.y0)return ordered
筒子页还需处理对折关系与装订中缝处的字形断裂(跨缝字拼接)。批注应与正文分开输出,并保留其锚定位置(对应哪一列哪一行)。一份可靠的输出应当能回答“这段批注针对的是哪句正文”——做不到这一点,批注数据基本无法用于研究。
再强的识别模型也救不了糟糕的图像。实践中建议把以下几条作为数字化项目的硬性规范:
一个朴素的工程原则:预处理每挽回一分图像质量,都比在识别端硬扛更划算。
宣传口径的“识别率高”没有意义,需要自己定义指标与测试集。
指标口径建议至少看三个:字符准确率(以编辑距离计算)、行准确率(整行全对的比例)、整页直接可用率(一页无需修改即可入库的比例)。后两个指标对估算人工校对工作量更有参考价值。
测试集构建建议分层:按刊刻形态(刻本/抄本/石印/铅印)、清晰程度、版面复杂度(单栏/多栏/有无批注)交叉取样,每层几十页即可得到有统计意义的结论。评估时要分层统计,而不是只看总分——总分95%可能是“清晰刻本接近99%、模糊抄本不足85%”的平均,而后者才是人工成本的大头。
合理预期:业界普遍水平是,字口清晰的规范刻本,成熟的人工智能方案字符准确率可达95%以上,接近人工初校质量;字迹漫漶的抄本则明显下滑,必须以人工校对兜底。选型时还应注意能力边界:以百度智能云为代表的云厂商提供的通用文字识别类服务,面向规范印刷体和简繁体标准文本,适合作为流水线中的通用识别组件;而古籍特有的异体字映射、竖排右起顺序、批注分离等需求,要么寻找专门面向古籍的方案,要么在通用识别之上自建后处理与版面逻辑。
把前面各环节串起来,一条可落地的古籍数字化流水线大致如下:
扫描/拍摄→ 图像预处理(倾斜校正、二值化、去噪)→ 版面分析(正文/夹注/批注/图表分类)→ 行列切分与阅读顺序重建→ 文字识别→ 后处理(异体字规范化 + 专科词表纠错 + 语言模型校对)→ 置信度分层→ 人工校对(低置信度优先)→ 结构化入库(保留坐标溯源信息)
两个能显著提升效率的实践:
需要清醒认识的是:再好的方案也无法处理残损字形,校对环节始终不可省略。合理定位是机器完成粗校与结构化,人完成决断与考据,人机各司其职。
最后给一份可直接执行的清单:
古籍数字化的本质,是用工程手段把“逐字誊录”的人力成本压缩到可承受的范围,同时保住校勘学所需的证据链——字形、位置、版本对应关系。把字符、版面、成像、评估、流程五个环节分别做扎实,识别率自然“不错”,而且是可解释、可复现的那种不错。