Skip to content

Extracting Data From a Diploma or Degree Certificate

8 min read · updated August 11, 2026

A diploma is the only document in this cluster whose typography is chosen for ceremony rather than for reading. That single fact accounts for almost all of the difficulty: blackletter type, wide letterspaced capitals, a date in Roman numerals, and a degree name that only means something if you know which institution awarded it.

A document designed not to be parsed

Every other document here has a form designer somewhere in its history who wanted the fields findable. A diploma has a calligrapher. There are no field labels at all: the degree, the recipient and the date are set as running text in a sentence, often a single sentence spanning the whole certificate, and the visual hierarchy is decorative rather than semantic — the largest text is usually the institution’s name, which is the field you need least.

It is also a document with a low information payload. A diploma typically states the awarding institution, the recipient, the degree, any honours, the date, and the signatures of officers. It usually does not state the field of study in any structured way, the grade, the dates of study, or a credential number. The transcript carries those. So the realistic goal is a small number of fields extracted reliably, not a rich record — and a schema that asks for a rich one will get an invented one.

What the diploma does establish is that a specific institution awarded a specific qualification to a named person on a date. That is exactly the set of facts a CV education entry claims, which makes the diploma the corroborating document for an extracted education history rather than a source of new fields.

Three typographic conventions that break OCR

  • Blackletter and engraved scripts. Fraktur and similar faces are a known hard case for general OCR because several letterforms differ from their modern equivalents, and the long s is routinely read as an f. General OCR models are trained overwhelmingly on modern faces; the specialised handling this needs is the subject of OCR on Fraktur typefaces, and the same techniques apply to an engraved diploma face.
  • Wide letterspaced capitals. Names are frequently set as A N N A M A R I A E R I K S S O N. Word segmentation depends on the ratio between inter-letter and inter-word spacing, and heavy letterspacing collapses that ratio — so the extractor either merges the words or splits every letter. The repair is a post-processing rule rather than a recognition fix: where a text run is majority single-character tokens, rejoin on the smaller gap and split on the larger.
  • Text over a printed background. Guilloche patterning, a watermark, a printed seal, or a coloured ground reduce contrast under the text. A diploma often has all four, and the institution seal is usually embossed over the signature block, which is the same occlusion problem a birth certificate has.

Some institutions issue the diploma entirely in Latin, which is not a typographic problem but a language one: the degree name, the honours and occasionally the date are all Latin, and a model asked to extract “the degree” may translate it into an English equivalent that the institution does not award. Ask for the text as printed and normalise afterwards, so the normalisation is a step you control rather than a decision the model made silently.

The date is often in Roman numerals

Conferral dates on diplomas are commonly set in Roman numerals — MMXXIV, or a full date such as DIE XV MENSIS MAII ANNO MMXXIV. Two things make this worth handling explicitly rather than hoping the model copes.

First, recognition confusables map straight onto valid numerals. I and l and 1, C and G, D and O, X and K — a misread that would produce gibberish in ordinary text produces a different, perfectly valid year here. MCMXCIV misread as MCMKCIV fails; misread as MCMXCIU fails; but a dropped I turns 1994 into 1993 with nothing to signal it.

Second, a model asked for a date will convert the numerals for you and the conversion is where the error enters. Extract the numeral string verbatim into its own field, convert it in your own code, and validate the result:

const R = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };

function fromRoman(s) {
  if (!/^[MDCLXVI]+$/.test(s)) return null;
  let total = 0;
  for (let i = 0; i < s.length; i++) {
    const v = R[s[i]], next = R[s[i + 1]] ?? 0;
    total += v < next ? -v : v;
  }
  // Round-trip: a valid numeral re-renders to itself. Catches "IIII", "MCMKCIV".
  return toRoman(total) === s ? total : null;
}

The round-trip test is the check digit this document does not otherwise have. A numeral that does not re-render to itself was either misread or uses a non-canonical form, and either way it should not become a year in your database without a human seeing it — the same posture as a checksum-validated identifier field. Bound the result too: a conferral year outside a plausible range for the institution is a read error caught by an ordinary date field validation rule, and it is one of the few validations available on a diploma at all.

Latin honours and what they are not

Honours appear as a Latin phrase — cum laude, magna cum laude, summa cum laude — or as an English equivalent such as “with distinction” or “with high honors”, or in the British system as a class of honours: first class, upper second, lower second, third.

These are not comparable across systems and should not be normalised onto a single scale. The thresholds for Latin honours are set by each institution, sometimes by percentile of the graduating class and sometimes by grade average, and they differ between faculties of the same university. A British upper second is not a defined equivalent of cum laude. Store the phrase as printed, store a coarse system tag — Latin honours, British classification, distinction-style, none — and stop there. Any mapping beyond that is a policy decision belonging to whoever is relying on the record.

Two parsing details are worth pre-empting. The honours phrase is usually adjacent to the degree name in the same sentence, so a naive degree extraction swallows it: “Bachelor of Arts magna cum laude” becomes the degree name. And “with honours” in the British sense is part of the degree title rather than a distinction, so BSc (Hons) is a degree name and first-class honours is a result. Separating those two is the same distinction drawn on the CV side.

Why degree names need a per-institution glossary

Degree abbreviations are institution-specific to a degree that surprises people. The same qualification is BA, B.A., A.B. and AB depending on where it was awarded; some institutions award an ScB where others award a BSc; and integrated masters, professional doctorates and named degrees are institution-defined by nature.

So resolution is a two-key lookup: institution first, then degree string. Extract the institution name, resolve it to an identifier — a national register of institutions is the right source, and there is one for most systems — and only then interpret the degree string against what that institution actually awards. A single global mapping table from abbreviation to level will be wrong for a predictable set of institutions and you will not find out which until somebody complains.

Once resolved, map onto ISCED levels for comparability rather than into a homegrown enum, for the reasons set out in extracting education history from a CV. Keep the printed string, the resolved institution identifier and the level as three separate fields; the printed string is what the document says, and it is the only one of the three that cannot be wrong.

A diploma is not evidence that a degree was awarded — it is evidence that a document exists. Confirmation comes from the awarding institution’s registrar or from the verification service that institution uses, and any process that relies on the qualification should be built around that check rather than around a better extraction. Extraction gets you a candidate record to verify, quickly and at scale, which is a genuinely useful thing to be and is not the same as verification.