All case studies
[ CASE STUDY ]Scholarly publishing · document AI

I taught AI to catalog research papers the way their experts do.

A major academic publisher had experts hand-cataloging every article: assigning 150+ classification codes and choosing from 7,000+ controlled-vocabulary terms, by hand, per paper, across a dozen inconsistent file formats. I built the AI pipeline that does it now: format-agnostic, vocabulary-constrained, and reviewed by their staff.

Anonymized. Specifics under NDA, framing and lessons in the open.

40+
Atomic AI extractors
150+/7,000+
Codes / controlled terms
~50
Fields per record
~85–88%
Accuracy vs human gold
~2 min
Per record
metadata-pipeline · scholarly records
NDA: details redacted
Inputs
Publisher XML
Vendor formats
PDFs
a dozen formats
Parser

Auto-detects each format → one canonical structure

AI Extraction
the core

Atomic extractors · one field at a time · constrained to the controlled vocabulary

codestermsauthorsaffil.method+ more
Merger

Source-aware conflict resolution

Outputs
Canonical record
schema-valid
Downstream systems
staff review cockpit low-code orchestration
Every output is schema-valid, every timeredacted
The problem

The publisher receives article metadata from many sources in inconsistent formats, and historically had subject-matter experts read each paper and hand-assign everything: 150+ classification codes, terms chosen from a 7,000+ term controlled vocabulary, methodology and population tags, authors, affiliations, identifiers (following thick production manuals). It was slow, expensive, and inconsistent from cataloger to cataloger.

By hand · per paper
Production manual
Tagged by hand
codetermmethodpop.
minutes of expert time / paper
What I built

An AI extraction pipeline. A deterministic parser auto-detects each vendor format and maps it into one canonical structure; then, the key move, instead of asking the model for everything at once, it runs an extractor per field, each one constrained to only the publisher's approved codes and vocabulary, with self-healing retries when the model drifts off-list. A merger combines the parser's structural fields with the AI's semantic fields, resolving conflicts. Staff review and correct in a web cockpit: PDF and XML side-by-side, AI-vs-human diffs, a data-quality heatmap, and field-level feedback.

Atomic extraction
one document
field extractor
field extractor
field extractor
field extractor
one canonical record
run in parallel · merged
The outcome

It runs at ~85–88% accuracy and 85–94% field coverage against human-cataloged "gold" records, in roughly two minutes a paper, replacing from-scratch manual indexing with an automated, vocabulary-validated, schema-conformant pipeline plus a review cockpit. A built-in evaluation harness scores every run, and a human-in-the-loop feedback loop drives the accuracy up over time.

vs human-cataloged gold
~88%
accuracy
expert hrs ~2 min
per paper
100% schema-valid
every record

[ specifics under NDA ]

[ THE PIPELINE ]Inside the build

What the pipeline does, piece by piece.

Six moving parts that turn a dozen inconsistent formats into one clean, vocabulary-validated record.

Format-agnostic parser

Auto-detects each vendor XML/PDF format and maps it into one canonical structure, hardened against malicious XML.

XML · PDF → canonical

Atomic extraction

One field per call, not one giant prompt. Distinct extractor types that run in parallel for speed and reliability.

40+extractor types

Vocabulary-constrained AI

Every field is limited to only the approved codes and terms; off-list values are rejected and the model self-heals.

rejects off-list · self-heals

Source-aware merger

Structural fields come from the parser, semantic fields from the AI. Combined with deliberate conflict resolution.

structural + semantic

Staff review cockpit

PDF/XML viewers, an AI-vs-human diff, a data-quality heatmap, and field-level feedback. The staff stay in control.

human-in-the-loop

Tiered-model cost engine

A cheap model handles simple fields, a stronger one handles the complex ones, and the huge vocabulary prompt is cached.

vocab prompt cached
[ UNDER THE HOOD ]Why it holds up

A few decisions do the heavy lifting.

The engineering choices that make AI extraction reliable enough to trust on every record. Anonymized, but real.

Atomic beats monolithic

One field per call is far more reliable than asking the model for everything at once, and each field gets its own right-sized model and runs in parallel.

Constrained generation

When the model returns a term that isn't in the controlled vocabulary, it's rejected and re-prompted with corrections: guardrails against LLM drift.

Cache the giant prompt

The 7,000+ term vocabulary lives in a cached system prompt, so every per-field call reuses it, big cost and latency savings.

Config, not code

Swap the vocabulary file and every prompt updates. The editorial team owns the terms, no deploy needed.

40+
extractors
150+
codes
7,000+
terms
~50
fields
~88%
accuracy
~2 min
/ record

[ anonymized: specifics under NDA ]

[ Let's build yours ]

Drowning in documents that need structure?

Tell me what your documents look like and what you need pulled out of them. I'll map out the build, put a real number on what it's worth, and you'll own every line of it. I reply within 48 hours on weekdays.