Skip to content

Extracting Author Affiliations From a Scientific Paper

8 min read · updated August 11, 2026

“Which institution is this author at?” looks like a field you read off the first page. It is not. It is a join between two lists, and the join key is a superscript digit that most PDF text extractors silently flatten into an ordinary character in the middle of a name.

It is a join, not a field

A typical byline holds two independent sequences. One is the author list, in credit order. The other is a numbered affiliation block, usually set smaller, immediately below. Neither contains the other. What connects them is a marker — a superscript numeral, or in older typography a symbol series such as asterisk, dagger, double-dagger, section sign — attached to each surname and repeated at the head of each affiliation line.

That makes the relationship many-to-many in both directions. One author can carry 1,3 and belong to two institutions. One affiliation can serve six authors. A corresponding author usually carries a second, different marker class (an asterisk, or an explicit “Correspondence to” footnote) that is orthogonal to the affiliation numbering, so a parser that treats all superscripts as affiliation keys will produce an author affiliated with institution “*”.

The consequence for a schema is that affiliation cannot be a string on the author record. It has to be a list of references into a separate affiliation table — the two-list shape covered in multi-entity document schema design — and that table has to survive the case where a marker resolves to nothing.

How the marker disappears

Superscripts are not a character property in a PDF. They are ordinary glyphs drawn smaller and higher, so a text extractor that emits a flat character stream in drawing order produces Ana Rivera1,3 Ben Osei2 — the digits still present but welded onto the names. That is the good case. The bad cases are worse and all of them are common:

  • The marker is dropped. Some pipelines filter runs of text below a font-size threshold to remove page furniture, and the affiliation markers go with it. You get clean author names, a clean affiliation list, and no way to connect them. Nothing about the output looks broken.
  • The marker is absorbed into the name. Rivera1 reaches the model, which helpfully normalises it to Rivera and discards the key. The extraction is now confidently wrong rather than visibly incomplete.
  • The marker is misread. At the point size used for affiliation markers, 1 and l, and 0 and O, are routinely confused. A marker of l matches no affiliation and the author ends up unaffiliated.
  • The comma is eaten. 1,3 becomes 13, which either matches nothing or — on a large consortium paper with more than thirteen affiliations — matches the wrong one. This is the failure that produces plausible, wrong output.

A vision model reading the rendered page rather than the text layer avoids most of this, because it sees the typography that encodes the relationship. It introduces its own problem: on a dense byline with forty authors it will happily invent a tidy one-to-one mapping. That is the same failure described in vision hallucination, and the defence is the same — give the model something it can be checked against.

The four byline conventions

A parser has to detect which convention is in use before it can apply any rule, because they are mutually incompatible:

  • Numbered superscripts with a numbered affiliation block. The dominant modern convention and the only one where the join is unambiguous when the markers survive.
  • Symbol series — asterisk, dagger, double-dagger, section, pilcrow. Common in older papers and in some physics and mathematics journals. The order of the series is a house style, not a standard, so the symbols carry no ordinal meaning.
  • Inline affiliations, where each author is followed immediately by their institution in parentheses or on the next line. No markers at all; the join is positional, and it breaks the moment two authors share an institution and the second one is written as “idem” or left blank.
  • Footnote affiliations, where the institution appears in a first-page footnote keyed to the author. Structurally the same as the symbol series, but the block is at the foot of the column rather than under the byline, so a naive “text after the byline” heuristic finds the abstract instead.

Resolve the DOI before you parse anything

This is the part that saves the most work and it is skipped in almost every write-up of this problem. Most journal articles published in the last fifteen years have a DOI, and Crossref — the registration agency for the majority of scholarly DOIs — exposes the deposited metadata over a public REST API. Where a publisher deposited affiliations, they come back already joined to the author, with no typography involved.

# The DOI is printed on the first page and in the header of most PDFs.
curl -s 'https://api.crossref.org/works/10.1000/182' \
  | jq '.message.author[] | {given, family, ORCID, affiliation}'

Two caveats keep this from being a complete answer, and both are worth encoding as a fallback rule rather than discovering later. Affiliation deposit is optional and inconsistent, so the array is frequently empty even when the paper clearly shows affiliations. And the affiliation string, when present, is unnormalised free text — the same department can appear five ways across five papers. For biomedical literature, PubMed Central’s JATS XML is the richer source: the<aff> element carries an id and the author’s <xref ref-type="aff"> carries the reference, which is the join already made explicit in the markup.

So the pipeline that works is: look for a DOI, resolve it, and only parse the PDF for the fields the lookup did not return. Reading the rendered page becomes the fallback rather than the default, which also removes most of your per-page vision cost. See extracting DOIs from a reference list for the identifier formats and their validation.

A schema that can represent the ambiguity

The single most useful design decision is to keep the raw marker in the record. If the join fails, you want to know whether it failed because the marker was missing or because it pointed at an affiliation that is not in the list — those are different bugs with different fixes.

{
  "affiliations": [
    { "id": "1", "raw": "Department of Materials, Northgate University, Leeds, UK" },
    { "id": "2", "raw": "Institute for Applied Physics, Rensvik, NO" }
  ],
  "authors": [
    {
      "family": "Rivera", "given": "Ana",
      "markers_raw": "1,2",
      "affiliation_ids": ["1", "2"],
      "corresponding": true
    },
    {
      "family": "Osei", "given": "Ben",
      "markers_raw": "l",
      "affiliation_ids": [],
      "unresolved_markers": ["l"]
    }
  ]
}

unresolved_markers is the field that makes the extraction checkable. Two arithmetic assertions fall straight out of it: every affiliation id should be referenced by at least one author, and every author marker should resolve. A paper where affiliation 4 exists and nobody points at it has lost a marker somewhere, and you can detect that without a human looking at the page. Route only those documents into review rather than sampling blindly — a derived flag driving the queue is the rule in confidence threshold review routing, and extraction confidence covers how to spend a review budget on the right rows.

A confusable-character rule closes the most common remaining gap: before declaring a marker unresolved, retry it with l and I mapped to 1 and O mapped to 0. If the retry resolves to exactly one affiliation, take it and flag the record; if it resolves to more than one, leave it unresolved.