BookTranslator
BookTranslator

OCR Fraktur Text: Preserve the Original Before Modernizing It

Use a small, reproducible Fraktur OCR experiment to distinguish recognition errors from long-s normalization before searching or translating an old book.

BookTranslator

BookTranslator Team

9 min read

To OCR printed Fraktur, choose a model that supports the script, test a short passage against the page, and decide whether your transcript should retain the long s, ſ, or normalize it to s. Keep the checked source transcript separate from any modernization or translation. A more familiar-looking word is not necessarily a more faithful reading of the print.

We tested two short, synthetic German passages in a Fraktur font and a modern-font control. Even on these clean images, the Fraktur model changed iſt to ift in one passage and to if in another. The useful result was not a winning-tool ranking: it was a demonstration that recognizing the characters, choosing a transcription convention, and modernizing the language are three different jobs.

This guide is for printed pages. It does not establish a workflow for handwritten Kurrent or Sütterlin, damaged manuscripts, or an entire historical collection.

Decide what counts as correct before running OCR

Write a one-sentence transcription policy before comparing tools. For example: “Keep the source spelling and long s; mark words I cannot verify.” Otherwise, you may penalize an intentional normalization as an error—or accept an unwanted rewrite because it looks fluent.

OCR-D provides a concrete example of this distinction. Its Level 1 guidelines represent long s and round s as s; Levels 2 and 3 distinguish them. These are transcription conventions, not an instruction to turn every old spelling into its modern equivalent. See the official Level 1 s rules and Level 2/3 s rules.

For a personal reading project, keep these outputs separate:

OutputExample from our authored teaching textWhat it is for
Source-oriented transcriptDie rothe Blume ſteht hier.Checking the recognized characters against the image
Long-s-normalized derivativeDie rothe Blume steht hier.Searching or reading without the long-s distinction
Modernized derivativeDie rote Blume steht hier.A separate editorial version with spelling changes

The second row changes only ſ to s; it does not implement all OCR-D Level 1 rules. The third row changes the source spelling as well. Neither derivative should silently replace the source-oriented transcript.

In particular, do not globally replace the letter f with s. Our failed OCR output contains ift, but a genuine f can also occur in the source. Fix the word against the image, not against a blanket substitution rule.

What happened in our eight-call experiment

On September 11, 2026, we rendered two original, three-line teaching passages in UnifrakturMaguntia and Noto Sans. Each image was recognized with two fixed Tesseract models: the tessdata_best Fraktur script model and its English model. The English configuration is a contrast, not a modern German baseline.

All eight calls used Tesseract 5.5.3, LSTM mode (--oem 1), a single text block (--psm 6), and 300 dpi. We did not change the settings, exclude results, or retry recognition within the original experiment. A September 12 packaging replay of the same eight images reproduced the saved output bytes.

The images were genuinely shaped with Apple CoreText and ligatures enabled, not drawn as unshaped character boxes. They use 64-pixel text on a 2200 × 460 white canvas. The images, glyph-count checks, font licenses, model hashes and raw outputs are available in the experiment package instructions.

Original three-line teaching passage rendered in UnifrakturMaguntia, including long s and a line of book, page and number references.

A specialized model still needed correction

The first source line was:

Das Waſſer iſt klar.

On the Fraktur-font image, the Fraktur model returned:

Das Waſſer ift klar.

Most of the line survived, but ſ in iſt became f. In the second passage, Das Thal iſt weit. became Das Thal if weit.: recognition changed one character and dropped another. Reading the output as plausible German is not a substitute for checking the original.

There was a different failure in the modern-font control. The Fraktur model kept the words in the first passage but changed the two semicolons in Buch 12; Seite 27; Nummer 105. to colons. Checking only long s would have missed those punctuation changes.

The target changes the score

We scored every raw output against two targets fixed before recognition: the exact source text, and the source with only ſ → s. Both comparisons normalize Unicode to NFC and collapse whitespace; they retain case and punctuation. We do not fold the raw output before scoring it.

The numbers below are character-edit distances—insertions, deletions and substitutions—not an accuracy percentage.

PassageRendered fontOCR modelEdits against exact sourceEdits against long-s-only normalized target
Long s and numbersFrakturFraktur16
Long s and numbersFrakturEnglish88
Long s and numbersNoto SansFraktur28
Long s and numbersNoto SansEnglish77
Historical-looking spellingFrakturFraktur24
Historical-looking spellingFrakturEnglish77
Historical-looking spellingNoto SansFraktur03
Historical-looking spellingNoto SansEnglish44

The zero in one row means an exact match for that one short input. It says nothing about the next page of a real book. Conversely, a model that correctly retains ſ receives additional differences when compared with a target that requires s. Those differences describe a policy mismatch, not necessarily misrecognition.

Inspect all original outputs and scores, the fixed source texts and scoring policy, or the verification script. The package records SHA-256 hashes so the model, image and output can be matched to each result.

What this experiment cannot tell you

These are two clean, large-font, synthetic passages—not scans of an old edition. We did not test faded ink, small print, gutters, columns, damaged paper, handwriting, or independent human transcriptions. We also did not test a modern German model, commercial OCR tools, or BookTranslator's OCR or translation output.

Treat the examples as reasons to inspect your own material, not an estimate of whole-book error rates. We would not choose an OCR service for a historical collection from this table.

Run a bounded test on the pages you actually need

If you use Tesseract locally, record the engine version and exact model file before comparing outputs. A model name alone does not identify the downloaded file. Our provenance record links the pinned public model and font sources; the large model files are not bundled with the article.

For our single-block sample image, with the Fraktur script model saved locally as models/Fraktur.traineddata, the command was:

tesseract samples/long-s-fraktur.png stdout --tessdata-dir ./models -l Fraktur --oem 1 --psm 6 --dpi 300

Tesseract's command-line documentation explains LSTM mode and the single-uniform-block assumption of PSM 6. That assumption fits our three-line image. It is not a recommendation to process every multicolumn book page with PSM 6.

For your own book, start with a passage you can transcribe confidently and one harder page representative of the material you need. Include a name or unfamiliar term, a number, and any changing typeface. If a book alternates scripts or languages, use the separate mixed-language PDF OCR guide rather than assuming one clean Fraktur paragraph covers the whole document.

Keep the scan unchanged. Save the raw OCR separately from corrections, and record the page or image identifier for each checked passage. If the output is unreadable, revisit the page image and segmentation before expanding the job to hundreds of pages.

Correct the transcript without inventing the missing word

Use a small correction log with four columns: source location, raw OCR, checked reading, and reason. The reason should distinguish a visible character error from an editorial transformation.

ObservationUseful actionAction to avoid
The image clearly shows iſt; OCR says iftCorrect this occurrence against the imageReplace every f in the document
OCR preserves rothe, but you want rote for readingKeep the source form and create a labeled modernized derivativeCount modernization as an OCR correction
A number or punctuation mark differsCheck that location even when the surrounding sentence is fluentReview only unusual letter shapes
The image is genuinely illegibleMark uncertainty in your working transcript and retain the image referenceAccept a plausible generated word as recovered evidence

If text already selects in a downloaded PDF, compare its pasted text against the image before starting over. The PDF copy-paste diagnosis explains why a visible page can look right while its hidden or mapped text is wrong. That is a different problem from choosing a Fraktur recognition model.

Stop after producing reliable source text if search, quotation checking, or reading German was the whole job. Translation is not a required cleanup step.

Translate only when the language is still the obstacle

For readers who need another language, the checked source is the point at which translation becomes useful. Keep the scan, reviewed transcript and translation distinguishable so you can tell whether a disputed passage originated in recognition or translation. The scanned PDF translation workflow provides the broader handoff.

If you choose BookTranslator's PDF Translator, evaluate a representative portion of your own document before relying on the full result. Our experiment does not verify BookTranslator's handling of historical Fraktur. Its OCR Mode rebuilds a clean document and may change the original page layout, fonts and font sizes; do not treat that output as a facsimile or assume original page references survive unchanged.

The practical order is simple: establish the source reading, label any normalization, then translate if needed. Fluency belongs at the end of that process—not in place of evidence at the beginning.

Verwandte Beiträge