Publicat el 15 de gener de 2026

per Equip AlamedaDev

Extraient Taules Massives de PDFs amb Reedy

L'extracció de documents falla de formes predictibles: no perquè el model no pugui llegir el document, sinó perquè li demanem que faci massa d'una vegada, sense forma de fer complir la completitud.

Si demanes a un LLM "un array JSON de cada fila en aquesta taula de 50 pàgines", sovint retornarà alguna cosa que sembla raonable, passa una verificació ràpida i està silenciosament incomplet. A vegades trunca. A vegades omple segments faltants amb soroll plausible. De qualsevol manera, el sistema downstream hereta l'error. Això està bé per a resums. És inacceptable per a ETL.

La sortida estructurada a nivell de document està desalineada amb entitats repetitives

La majoria dels pipelines d'extracció comencen amb una idea neta: defineix un esquema per al document, executa una sola trucada i obtén un sol objecte JSON de tornada. És ordenat, és fàcil de connectar i funciona bé quan estàs extraient un grapat de camps.

El problema comença quan el "document" és efectivament una base de dades renderitzada com a PDF: directoris de proveïdors, quadrícules de cobertura, fulls de tarifes, catàlegs de productes. En aquests casos, la completitud importa, i la completitud és exactament en el que un blob JSON a nivell de document és pitjor per lliurar, perquè la sortida creix gran, el contingut és repetitiu i el model no té un incentiu incorporat per enumerar cada element. Si necessites totes les files, "suficientment a prop" no està prou a prop.

Extreu la unitat que es repeteix

Quan el contingut es repeteix, la teva estratègia d'extracció també hauria de repetir-se.

En lloc de demanar al model que produeixi una llista gegant, defineix un esquema per a una entitat (una fila / una entrada / un bloc) i extreu entitat per entitat, després agrega. L'extracció d'entitats repetides no és un truc de prompt. És una elecció d'alineació: fas coincidir la granularitat d'extracció amb l'estructura del document. En Reedy, això és Mode Pàgina.

Què fa el Mode Pàgina

El Mode Pàgina no és "dividir per pàgina" i no és fragmentació ingènua. És segmentació més estructura amigable per a validació:

  • Files de taula, entrades de llista, blocs repetits.

  • En segments petits de la mida d'una entitat (sovint un grapat d'entitats alhora).

  • A cada segment.

  • En una llista que puguis comptar, emmagatzemar i consultar.

Ja no estàs apostant que el model es mantindrà disciplinat a través d'una llista massiva. Li estàs donant una feina més petita, repetidament, i fent possible verificar que va fer tot el treball.

Exemple: extraient 380+ files d'un PDF de cobertura hospitalària

Una bona prova d'estrès és un document que és "només una taula", estesa a través de moltes pàgines: un llistat d'hospitals per comtat amb cobertura de plans per a cada hospital. La taula és prou gran com perquè l'extracció ingènua a nivell de document tendeixi a retornar el primer fragment i després degradar-se.

El Mode Pàgina és una bona opció perquè cada entitat és local: una fila d'hospital conté el comtat, el nom de l'hospital i els noms dels plans.

Defineix l'esquema per a un hospital:

from pydantic import BaseModel, Field

class Hospital(BaseModel):
    county: str = Field(description="County name")
    hospital_name: str = Field(description="Hospital name")
    plan_names: list[str] = Field(description="Plans accepted at this hospital")

Després extreu per fila:

from reedy import ReedyClient  # replace with your real SDK import

reedy = ReedyClient(api_key="REEDY_API_KEY")

result = reedy.extract(
    file="hospital-coverage.pdf",
    schema=Hospital,
    mode="page"
)

len(result.items), result.items[:2]

Dues regles operatives fan que això sigui segur per a producció:

  • Compara-ho amb un recompte esperat (de l'índex del PDF, un total de files conegut o un recompte mostrejat).

  • No com 'suficientement bo'.

El valor del Mode Pàgina no és que faci possible l'extracció; és que fa que la completitud sigui comprovable.

No només per a taules: catàlegs i blocs repetits

Molts PDFs no són quadrícules estrictes, però encara tenen estructura repetida: cada producte té un codi, un nom, algunes especificacions, un paràgraf de descripció. Visualment, és consistent; semànticament, és una entitat repetida.

El Mode Pàgina també funciona allà, sempre que el límit de l'entitat sigui descobrible i la informació sigui principalment local al bloc.

from pydantic import BaseModel, Field

class CatalogItem(BaseModel):
    section: str = Field(description="Category / section header")
    sku: str = Field(description="Product code / SKU")
    name: str = Field(description="Product name")
    specs: str = Field(description="Key specs")
    description: str = Field(description="Description text")

Mateix flux de treball: extreu per entitat, agrega en una llista, verifica el recompte, després ETL.

El flux de treball de la UI de Reedy està dissenyat per manejar aquest patró sense necessitat d'una API.

Pas 1: Pujar el document

Obre l'Agent de Prompt General i puja el teu PDF.

Un cop aparegui sota Seleccionar Documents i l'estat indiqui que està llest, pots executar l'extracció.

Pas 2: Utilitza un prompt que coincideixi amb l'entitat que vols

Per a taules repetitives, el prompt ha de definir què representa una fila i quins camps vols per entrada.

Aquí hi ha un exemple per a un document de cobertura d'hospitals per comtat:

Extract a list of hospitals organized by county, showing which BSC (Blue Shield of California)
health plans are available at each hospital. For each hospital entry, provide the county,
hospital name, and list of available plans (Trio HMO, SaveNet, Access+ HMO, BlueHPN PPO,
Tandem PPO, PPO).

Pas 3: Activa "Processar per Pàgina"

Per a documents llargs, activa Processar per Pàgina.

Aquest és l'equivalent en la UI de "no facis una generació gegant". Manté l'extracció acotada, redueix la possibilitat de resultats de "només primer fragment" i facilita detectar on les coses es degraden.

Pas 4: Estableix Format de Sortida a JSON i executa

Tria Format de Sortida: JSON, després fes clic a Enviar Prompt.

Obtindràs un array JSON de tornada. Depenent del teu prompt, Reedy pot retornar:

- una estructura normalitzada (p. ex., plan_names: [...]), o

- una estructura tipus taula (p. ex., un camp per pla amb espais en blanc quan no està disponible)

Amdues són utilitzables. Si estàs carregant en una base de dades, la forma normalitzada sol ser més fàcil.

Què això habilita

Un cop pots extreure de manera fiable cada fila, els PDFs deixen de ser artefactes morts i comencen a ser fonts de dades:

  • Transforma les dades extretes en formats de base de dades estructurats.

  • "mostrar tots els hospitals al Comtat X amb el Pla Y"

  • què ha canviat aquest mes?

  • Que coincideixin amb com els usuaris realment utilitzen la informació

El Mode Pàgina és el pont de "un PDF que sembla una taula" a "un conjunt de dades en el qual pots confiar".

El Mode Pàgina assumeix localitat d'entitat. Si el significat d'una fila depèn fortament d'un encapçalament, una llegenda o un context global que no es repeteix a prop de la fila, tens dues opcions comunes:

  • Perquè l'extracció d'entitats romangui local.

  • Una passada a nivell de document per a globals, una passada a nivell de fila per a elements.

El punt és fer que la completitud i la correcció siguin alguna cosa que el teu pipeline pot fer complir, no alguna cosa que descobreixes després d'enviar.

Prova-ho avui

Visita usereedy.com per començar amb Reedy.

Construïm junts

Unim experiència i innovació per portar el teu projecte al següent nivell.

Contacta’ns