OCR 识别 Fraktur 文本:先保留原文,再考虑现代化
通过一个小型、可复现的 Fraktur OCR 实验,在搜索或翻译古书之前,先区分识别错误与长 s 规范化。

要对印刷体 Fraktur 进行 OCR,应选择支持该字体的模型,用一小段文字与页面进行比对测试,并决定转录文本是保留长 s(ſ)还是将其规范化为 s。将经过核对的源转录文本与任何现代化或翻译版本分开保存。看起来更熟悉的词未必是对印刷原文更忠实的解读。
我们测试了两段简短的合成德语文本,分别使用 Fraktur 字体和现代字体作为对照。即使在这些清晰的图像上,Fraktur 模型仍将一段中的 iſt 改为 ift,另一段中改为 if。有用的结果并非工具排名:它表明识别字符、选择转录规范以及将语言现代化是三件不同的事。
本指南针对印刷页面。它不适用于手写体 Kurrent 或 Sütterlin、受损手稿或整个历史收藏的工作流程。
在运行 OCR 之前,先确定什么算正确
在比较工具之前,先写下一句话的转录政策。例如:“保留源拼写和长 s;标记我无法核实的词。”否则,你可能会将有意为之的规范化视为错误——或者因为看起来流畅而接受不想要的改写。
OCR-D 为这一区别提供了具体示例。其 Level 1 指南将长 s 和圆 s 都表示为 s;Level 2 和 3 则区分它们。这些是转录规范,而非将每个旧拼写转换为现代对应形式的指令。参见官方 Level 1 s 规则 和 Level 2/3 s 规则。
对于个人阅读项目,请将这些输出分开保存:
| 输出 | 我们编写的教学文本示例 | 用途 |
|---|---|---|
| 面向源文本的转录 | Die rothe Blume ſteht hier. | 将识别出的字符与图像进行核对 |
| 长 s 规范化衍生版本 | Die rothe Blume steht hier. | 在不区分长 s 的情况下搜索或阅读 |
| 现代化衍生版本 | Die rote Blume steht hier. | 一个单独的编辑版本,包含拼写更改 |
第二行仅将 ſ 改为 s;它并未实现所有 OCR-D Level 1 规则。第三行还更改了源拼写。两个衍生版本都不应悄悄替换面向源文本的转录。
特别要注意,不要全局将字母 f 替换为 s。我们失败的 OCR 输出包含 ift,但源文本中也可能出现真正的 f。应根据图像修正单词,而不是依据一刀切的替换规则。
我们的八次调用实验中发生了什么
2026 年 9 月 11 日,我们用 UnifrakturMaguntia 和 Noto Sans 渲染了两段原创的三行教学文本。每张图像均使用两个固定的 Tesseract 模型进行识别:tessdata_best Fraktur 脚本模型及其英语模型。英语配置是对照,并非现代德语基线。
所有八次调用均使用 Tesseract 5.5.3、LSTM 模式(--oem 1)、单一文本块(--psm 6)和 300 dpi。在原始实验中,我们没有更改设置、排除结果或重试识别。9 月 12 日对同样八张图像的打包重放复现了保存的输出字节。
这些图像确实使用 Apple CoreText 并启用连字进行整形,而非绘制为未整形的字符框。它们在 2200 × 460 的白色画布上使用 64 像素文本。图像、字形计数检查、字体许可证、模型哈希和原始输出均可在实验包说明中获取。

专用模型仍需修正
第一行源文本为:
Das Waſſer iſt klar.
在 Fraktur 字体图像上,Fraktur 模型返回:
Das Waſſer ift klar.
该行大部分内容得以保留,但 iſt 中的 ſ 变成了 f。在第二段中,Das Thal iſt weit. 变成了 Das Thal if weit.:识别过程改变了一个字符,又漏掉了另一个字符。把输出读作看似合理的德语,并不能替代对原文的核对。
现代字体对照组中出现了另一种错误。Fraktur 模型保留了第一段中的词语,却把 Buch 12; Seite 27; Nummer 105. 中的两个分号改成了冒号。如果只检查长 s,就会漏掉这些标点变化。
目标文本会改变评分结果
我们将每个原始输出与识别前固定的两个目标进行比对评分:精确的源文本,以及仅将 ſ → s 后的源文本。两种比较都会将 Unicode 规范化为 NFC 并合并空白;它们保留大小写和标点。评分前我们不会对原始输出做折叠处理。
下面的数字是字符编辑距离——插入、删除和替换——而非准确率百分比。
| 段落 | 渲染字体 | OCR 模型 | 相对精确源文本的编辑数 | 相对仅长 s 规范化目标的编辑数 |
|---|---|---|---|---|
| 长 s 与数字 | Fraktur | Fraktur | 1 | 6 |
| 长 s 与数字 | Fraktur | 英语 | 8 | 8 |
| 长 s 与数字 | Noto Sans | Fraktur | 2 | 8 |
| 长 s 与数字 | Noto Sans | 英语 | 7 | 7 |
| 仿古拼写 | Fraktur | Fraktur | 2 | 4 |
| 仿古拼写 | Fraktur | 英语 | 7 | 7 |
| 仿古拼写 | Noto Sans | Fraktur | 0 | 3 |
| 仿古拼写 | Noto Sans | 英语 | 4 | 4 |
某一行中的零表示该单个短输入完全匹配。这并不能说明真实书籍的下一页会怎样。反过来,一个正确保留了 ſ 的模型,在与要求 s 的目标对比时,会产生额外的差异。这些差异描述的是策略不匹配,而不一定是识别错误。
查看所有原始输出与评分、固定源文本与评分策略,或验证脚本。该包记录了 SHA-256 哈希值,因此可以将模型、图像和输出与每个结果对应起来。
这个实验无法告诉你什么
这两段是干净、大字号、合成生成的文本——并非旧版书籍的扫描件。我们没有测试褪色墨水、小字号、装订沟、分栏、破损纸张、手写体或独立的人工转写。我们也没有测试现代德语模型、商业 OCR 工具,或 BookTranslator 的 OCR 或翻译输出。
请把这些示例当作检查你自己材料的理由,而不是对整本书错误率的估计。我们不会根据这张表为历史馆藏选择 OCR 服务。
在你真正需要的页面上进行有边界的测试
如果你在本地使用 Tesseract,请在比较输出之前记录引擎版本和确切的模型文件。仅凭模型名称无法识别下载的文件。我们的来源记录链接了固定的公共模型和字体来源;大型模型文件并未随文章打包。
对于我们的单块示例图像,将 Fraktur 手写体模型本地保存为 models/Fraktur.traineddata,命令为:
tesseract samples/long-s-fraktur.png stdout --tessdata-dir ./models -l Fraktur --oem 1 --psm 6 --dpi 300
Tesseract 的命令行文档解释了 LSTM 模式以及 PSM 6 的单均匀块假设。该假设适合我们的三行图像。这并不是建议用 PSM 6 处理每一页多栏书籍页面。
对于你自己的书,请从一段你能自信转写的段落开始,再选一页能代表所需材料的较难页面。包含一个名称或不熟悉的术语、一个数字,以及任何变化的字体。如果一本书交替使用不同文字或语言,请使用单独的混合语言 PDF OCR 指南,而不是假设一个干净的 Fraktur 段落就能覆盖整个文档。
保持扫描件不变。将原始 OCR 结果与修正内容分开保存,并记录每个已核对段落的页码或图像标识符。如果输出无法辨认,请先重新检查页面图像和分割结果,再决定是否将任务扩展到数百页。
修正转录文本,但不要凭空补出缺失的词
使用一个包含四列的简易修正日志:源位置、原始 OCR、核对后的读法、理由。理由应区分可见的字符错误与编辑性改写。
| 观察 | 有用的操作 | 应避免的操作 |
|---|---|---|
图像清楚显示 iſt;OCR 却识别为 ift | 对照图像修正这一处 | 替换文档中所有的 f |
OCR 保留了 rothe,但你为了阅读想要 rote | 保留源形式,并创建一个标注清楚的现代化衍生版本 | 将现代化处理算作 OCR 修正 |
| 数字或标点符号存在差异 | 即使周围句子通顺,也要检查该位置 | 只检查不寻常的字母形状 |
| 图像确实无法辨认 | 在工作转录中标记不确定性,并保留图像引用 | 接受一个看似合理的生成词作为已恢复的证据 |
如果下载的 PDF 中文本已经可以选中,请先将粘贴出的文本与图像进行比对,再决定是否从头开始。PDF 复制粘贴诊断解释了为什么一个可见页面看起来正常,但其隐藏文本或映射文本却是错误的。这与选择 Fraktur 识别模型是不同的问题。
如果搜索、引文核对或阅读德语就是全部任务,那么在生成可靠的源文本后即可停止。翻译并不是必需的清理步骤。
只有当语言仍然是障碍时才进行翻译
对于需要另一种语言的读者来说,经过核对的源文本正是翻译变得有用的起点。请让扫描件、审校后的转录文本和译文保持可区分,这样你就能判断有争议的段落是源于识别还是翻译。扫描 PDF 翻译工作流提供了更广泛的交接说明。
如果你选择 BookTranslator 的 PDF 翻译器,请先评估你自己文档中具有代表性的一部分,再依赖完整结果。我们的实验并未验证 BookTranslator 对历史 Fraktur 字体的处理能力。其 OCR 模式会重建一份干净的文档,并可能改变原始页面布局、字体和字号;不要将该输出视为影印件,也不要假设原始页码引用会原样保留。
实际顺序很简单:先确定源文本读法,再标注任何规范化处理,然后按需翻译。流畅性属于这一过程的最后一步——而不是在开头取代证据。





