简介:古籍数字化中,最耗时的环节往往是文字识别:规模庞大的异体字体系、竖排无标点的复杂版式、破损模糊的原始图像,使通用 OCR 难以直接胜任。本文从字符集、版面分析、识别模型、后处理校对四个维度拆解古籍识别的技术要点,并给出评测指标、选型清单与人机协同流水线的落地方法,帮助科研与工程团队提升古籍数字化的效率与质量。
古籍数字化项目通常包含扫描采集、图像预处理、文字识别、校对标点、结构化编目等环节。大量项目实践反复验证了一个结论:人力消耗最大、质量最难控制的环节,恰恰是最不起眼的“识字”。
现代简体文本的常用字总量不过六七千,通用 OCR 技术已能成熟处理;但古籍用字完全是另一个量级——正字之外,还叠加着异体字、俗体字、避讳字、碑刻别字等历史层积,历代文献中累积的不同字形以十万计。再叠加纸页老化、虫蛀水渍、竖排右起、双行夹注等客观条件,无论是纯人工录入,还是直接套用现代文本 OCR,都容易陷入“校对时间比重新誊录还长”的窘境。
正确的做法,是把古籍文字识别当作独立的领域技术问题,用“领域化识别 + 人机协同校对”重构整条流水线。
古籍纸页常见老化发脆、虫蛀、水渍、霉斑、墨迹脱落;扫描过程又会引入歪斜、光照不均、装订处阴影。识别系统必须同时对抗两类退化,且历史损伤无法通过重新拍摄解决。
古籍多为竖排右起、通篇无标点;刻本常含双行小注、眉批、圈点、朱墨套印。若版面分析按现代横排假设设计,切行就会出错,后续识别无从谈起。版面分析不是配角,而是古籍 OCR 的第一道门槛。
结论:不是通用 OCR 技术不行,而是“通用”与“领域”之间存在明显鸿沟。工程上应把通用服务(例如百度智能云等主流云厂商提供的通用文字识别类服务)用于现代文本环节建立流程基线,而古籍环节必须重点考察领域适配深度。
方案必须建立在覆盖完整的字符表之上,并区分两个输出层次:
工程上通常维护一张双向映射表并记录置信度,让校对者可以一眼看到系统判定的异体关系;避讳字还可结合朝代信息给出提示,辅助文献断代。
早期方案依赖“单字切割 + 单字分类”,切割错误与分类错误两段累积。当前主流做法是端到端行识别:
def process_page(image, engine, conf_threshold=0.85):# 1) 版面分析:竖排列切分与行提取columns = layout_detect(image)results = []for col in columns:for line in col.lines:# 2) 行级识别:返回字符序列与逐字置信度chars, confs = engine.recognize(line)if sum(confs) / len(confs) < conf_threshold:# 3) 低置信度行进入人工校对队列results.append({"type": "review", "line": line, "text": chars})else:# 4) 高置信度行走语言模型后处理(纠错 + 标点)results.append({"type": "auto", "text": lm_postprocess(chars)})# 5) 异体字归一化,保留"原字形-识别字-校改字"三层记录return normalize_variants(results, keep_trace=True)
配套的流水线架构可概括为:对象存储保存原图与识别结果 → 消息队列调度批量识别任务 → 置信度分流 → 人工校对界面(原图、识别文本与置信度并排展示)→ 校改差异留存用于模型迭代。这些环节均可通过对象存储、消息队列、日志监控等通用云产品类目搭建。
古籍繁体字识别的难点,本质上是“字符集长尾 × 载体退化 × 版式复杂”三重约束的叠加,任何单点优化都难以奏效。可靠的技术路径是:以大字符表与异体字归一化作地基,用端到端行识别借助上下文消歧,靠语言模型与自动标点压缩后续整理成本,最后以置信度驱动的人机协同把人力用在刀刃上。对古籍数字化团队而言,与其追逐“一步到位的全自动”,不如把评测体系与校对流水线建扎实——识别准确率会随模型迭代持续提升,而一套可度量、可追溯的工程框架,才是项目长期效率的真正保障。