简介:古籍数字化场景中,普通OCR面对繁体异体字、竖排多栏与批注夹注往往力不从心。本文从字符集鸿沟、版面分析、语义后处理、图像质量与评估方法五个维度,系统拆解古籍文字识别的核心难点,给出可落地的选型清单、预处理规范与人机协同校勘工作流,并附示意代码,帮助研究团队显著压缩人工逐字校对的人力成本。
做过古籍数字化的人,几乎都经历过同一件事:现代OCR工具跑印刷体文档一路顺畅,一旦换到刻本、抄本,输出就惨不忍睹。这不是玄学,而是古籍在三个层面同时挑战了现代OCR的技术假设。
现代简体中文常用字规模约六七千字,主流OCR模型的识别字典基本按这个量级设计。古籍用字则是另一个世界:历代积累的汉字字形总量估计达十万量级,其中大量是异体字、俗字、通假字与避讳字。以中医古籍为例,“癥”“瘵”“薁”这类字在现代语料中极为罕见,模型要么字典里根本没有(表现为“识别不出”),要么因训练样本稀少而频繁误判(表现为“识别错误”)。后者更隐蔽,也更需要上下文手段来补救。
现代文档默认横排、从左至右、单栏;古籍恰好相反——竖排、从右至左逐列阅读,还叠加筒子页、上下分栏、眉批、旁批、夹注、图表混排等结构。若版面分析把批注混入正文,或把列的顺序排反,即便单字识别全部正确,整页输出依然是错的。可以说,在古籍场景中,版面分析的重要度不亚于单字识别。
纸张老化、透光、墨迹洇散、虫蛀残损,批注本还有朱墨双色。低质量输入会同时打击检测(行、列切分不准)与识别(字形模糊)两个环节,这是所有古籍项目绕不开的物理现实。
理解了失灵原因,就能看清一条可靠的古籍识别方案应当具备什么。
识别字典的规模是硬指标。面向古籍的方案需要把输出字典扩展到数万字的量级,并在识别后做异体字归一化:通过异体字映射表把“癥—症”这类字形统一到规范字形,同时保留原始用字记录。这里要遵守校勘学的“存真”原则——通假字不应被擅自“改正”,正确的做法是保留原字、给出上下文提示,改与不改由研究者裁决。
技术上通常依赖目标检测/实例分割,把页面切成若干区域并分类为正文、眉批、旁批、夹注、图表、框线,再按古籍阅读顺序(先定栏、再逐列、从右至左)串接输出。批注还应做位置锚定,与所对应的正文段落建立关联,否则校勘时批注就失去了语境。
识别输出可再经语言模型重排序与领域词典校正。例如中医古籍里的方剂名、穴位名可以建成领域词表,用于低置信度字符的二次判别;对通假字(如“反”在特定语境下通“返”),可结合上下文给出候选而非直接替换。
再强的模型也救不了劣质输入。工程上应遵循以下规范:
# 古籍识别流水线(示意)def process_volume(page_imgs, domain_dict):results = []for img in page_imgs:img = preprocess(img) # 纠偏/去噪/光照均衡layout = detect_layout(img) # 版面分析:正文/批注/图表for region in by_reading_order(layout.regions):if region.type in ("眉批", "旁批", "夹注"):results.append({"type": "annotation","anchor": region.anchor, # 与正文的相对位置"text": recognize(region, "extended"),})elif region.type == "text":text = recognize(region, "extended") # 大字符集识别text = normalize_variants(text) # 异体字归一text = lm_postcorrect(text, domain_dict) # 语义校正results.append({"type": "body","text": text, "conf": region.avg_conf})return merge(results) # 按阅读顺序合并,导出结构化结果
识别只是中间产物,落地价值取决于后处理链路:
选工具不要看宣传语,用自己的语料做小规模实测:
| 评估维度 | 测试方法 | 关注点 |
|---|---|---|
| 字符覆盖 | 抽取自己语料中的生僻字样本测试 | 是否漏字、错字 |
| 版面能力 | 挑最复杂的多栏带批注页 | 分栏、批注归属、阅读顺序 |
| 鲁棒性 | 用模糊、歪斜、透光样本压测 | 识别率的衰减曲线 |
| 工程能力 | 批量接口、并发、结构化输出 | 能否对接现有流水线 |
| 数据合规 | 涉及馆藏与文物数据的授权边界 | 传输与存储方式 |
从云服务角度看,以百度智能云为代表的通用OCR能力已支持繁体中文与竖排文本识别,可作为基线方案快速跑通流程;但古籍的异体字归一、批注版面处理与领域校勘逻辑,仍需在基线之上自建后处理链路。开源方案的识别与版面组件也可复用,关键是字典扩展与领域语料的持续积累。
古籍OCR的成败,从来不是“挑一个识别率最高的工具”那么简单,而是一条由扫描规范、版面分析、字符归一、语义校正与人机协同校勘组成的完整工程链。普通OCR的失灵提醒我们尊重问题的复杂度:十万量级的字形、繁复的版式、脆弱的载体,每一项都值得单独投入。把选型评估建立在自己的语料实测上,把工程重心放在数据质量与后处理链路上,识别准确率才有机会逼近可用、可信的水平,古籍数字化也才能真正从“扫进电脑”走向“可以用起来”。