Naar inhoud
lightbulb Welkom op de nieuwe kennisbank | We hebben de docs volledig vernieuwd met meer dan 160 features. Bekijk wat nieuw isarrow_forward

Extractieprompts: data uit tekst halen

Leer hoe je AI gebruikt om gestructureerde data uit ongestructureerde tekst te halen: namen, datums, bedragen, entiteiten en meer, met betrouwbare JSON-output.

Wat is data-extractie met AI?

Data-extractie is het proces van het omzetten van ongestructureerde tekst naar gestructureerde data. Denk aan namen, datums en bedragen uit facturen halen, contactgegevens uit e-mails extracten, of productspecificaties uit beschrijvingen parsen.

AI-modellen zijn hier bijzonder goed in, omdat ze tekst contextbewust lezen en patronen herkennen die traditionele regex-parsers missen. Een mensnaam blijft een mensnaam, ook al staat hij anders gespeld of op een onverwachte plek.

Basispatroon voor extractie

De simpelste extractieprompt:

Extraheer de naam en het telefoonnummer uit de volgende tekst en geef ze als JSON.
Tekst: [tekst]

Verbeterd met een expliciet schema:

Extraheer de contactgegevens als JSON-object:
{
  "naam": "volledige naam of null",
  "telefoon": "telefoonnummer in +31-formaat of null",
  "email": "e-mailadres of null"
}
Als een veld niet aanwezig is in de tekst, gebruik null.
Tekst: [tekst]

Door null expliciet te definiëren voorkom je dat het model ontbrekende velden verzint.

lightbulb

Gebruik native gestructureerde output waar het kan

Veel moderne modellen, waaronder Gemini, ondersteunen een vaste JSON-schemamodus (controlled generation). Daarbij dwingt het model de output af tegen je schema, in plaats van dat je hoopt op geldige JSON. Werk je via een API, geef het schema dan mee als responseSchema of via een Pydantic- of Zod-model. Dat is betrouwbaarder dan het schema alleen in de prompt zetten.

Factuurverwerking

Een veelgebruikte extractietoepassing is het uitlezen van facturen:

Extraheer de volgende gegevens uit de factuur en geef ze als JSON:
{
  "leverancier": "bedrijfsnaam",
  "btw_nummer": "btw-nummer of null",
  "factuur_nummer": "factuurnummer",
  "factuur_datum": "datum in ISO 8601 formaat",
  "vervaldatum": "datum in ISO 8601 formaat of null",
  "subtotaal": "bedrag als number zonder valutasymbool",
  "btw_bedrag": "btw-bedrag als number",
  "totaal": "totaalbedrag als number",
  "valuta": "EUR of andere valutacode"
}
Factuur: [tekst of afbeelding]
info

Valideer numerieke velden altijd

Bij factuurverwerking is exactheid essentieel. Controleer de numerieke velden programmatisch: subtotaal plus btw moet gelijk zijn aan het totaal. Klopt dat niet, markeer de factuur dan voor handmatige controle.

Named Entity Recognition (NER)

Bij entiteitsherkenning laat je het model categorieën toekennen aan stukjes tekst:

Extraheer alle entiteiten uit de volgende tekst en categoriseer ze:
- Personen (PERSOON)
- Organisaties (ORGANISATIE)
- Locaties (LOCATIE)
- Datums (DATUM)
- Bedragen (BEDRAG)

Geef als JSON-array: [{"entiteit": "tekst", "type": "TYPE"}]
Tekst: [tekst]

Meerdere items extracten

Bij teksten met meerdere records vraag je een array terug:

Extraheer alle vermelde producten als JSON-array. Elk product heeft:
- naam: string
- hoeveelheid: number
- eenheid: string (stuks, kg, liter, enzovoort)
- prijs: number

Tekst: [tekst met meerdere producten]

Zo bouw je een betrouwbare extractieprompt

  1. Definieer het outputschema volledig: velden, typen en formaten (ISO 8601 voor datums, E.164 voor telefoonnummers).
  2. Specificeer het null-gedrag: leg vast wat het model doet als een veld ontbreekt.
  3. Geef een voorbeeldoutput: een concreet voorbeeld is duidelijker dan een abstracte beschrijving.
  4. Valideer programmatisch: parse de JSON en controleer op logische consistentie.
  5. Implementeer retry-logica: stuur bij een parse-fout de foutmelding terug en vraag om correctie.

Extractie met normalisatie

Naast pure extractie kun je ook normalisatie vragen, zodat de output direct opschoonbaar is:

Extraheer en normaliseer de contactgegevens:
- Naam: capitaliseer correct (Jan de Vries, niet JAN DE VRIES)
- Telefoon: normaliseer naar +31 XXXXXXXXX formaat
- E-mail: lowercase
- Bedrijfsnaam: exacte spelling bewaren

Tekst: [tekst]

Complexe extractie met context

Soms heeft extractie redeneerstappen en context nodig, bijvoorbeeld bij contracten:

Lees de volgende juridische overeenkomst. Extraheer:
1. Partij A: bedrijfsnaam, KvK-nummer, adres
2. Partij B: bedrijfsnaam, KvK-nummer, adres
3. Startdatum overeenkomst
4. Einddatum overeenkomst (of "onbepaalde tijd")
5. Overeengekomen vergoeding per maand
6. Opzegtermijn in dagen

Geef als JSON. Als informatie niet expliciet staat, geef null.
warning

Let op hallucinaties

AI-extractie kan informatie verzinnen die niet in de brontekst staat. Instrueer het model daarom expliciet om null te gebruiken voor ontbrekende velden, en valideer kritieke extracties altijd tegen de bron voordat je ze automatisch verwerkt.

Extractie uit ongestructureerde tabellen

Ook losse, ongeformatteerde tabellen zijn vaak goed uitleesbaar:

De volgende tekst bevat een ongeformatteerde tabel. Extraheer de gegevens als
JSON-array van objecten. Elke rij is één object, elke kolom is één veld.
Bepaal zelf de veldnamen op basis van de kolomkoppen.
Tekst: [tekst met tabel]

Veelgemaakte fouten

Fout Gevolg Oplossing
Geen null-instructie Model verzint ontbrekende waarden Schrijf expliciet wat null is
Geen voorbeeldoutput Inconsistente structuur Voeg een concreet voorbeeld toe
Geen validatie achteraf Foute data sluipt door Parse en check logische consistentie
Te diep genest schema API weigert of model worstelt Houd het schema plat en kort
Hoe betrouwbaar is extractie bij slecht opgemaakte tekst?

De betrouwbaarheid daalt naarmate de tekst meer fouten, afkortingen of inconsistenties bevat. Voeg context toe, bijvoorbeeld: "Dit is een handgeschreven notitie met afkortingen. Interpreteer ND als naam directeur."

Kan ik extractie en transformatie combineren?

Ja. Je kunt het model laten extracten en direct laten omzetten, bijvoorbeeld: "Extraheer de datum en converteer naar een Unix-timestamp." Bij veel transformaties is het wel verstandiger om die in je eigen code te doen, omdat dat exact en goedkoper is.

Werkt extractie bij meerdere talen?

Ja. Specificeer de taal als die bekend is, bijvoorbeeld: "De tekst is in het Duits. Extraheer..." Modellen kunnen data uit anderstalige bron halen en de waarden optioneel naar een andere taal normaliseren.

Hoe ga ik om met ambiguïteit?

Vraag het model om twijfel te signaleren, bijvoorbeeld door een waarde met een vraagteken terug te geven of een apart veld zoals vertrouwen: laag. Zo kun je die records gericht naar handmatige controle sturen.

Moet ik het schema in de prompt of in de API meegeven?

Als je tool het ondersteunt, geef het schema dan mee via de gestructureerde-outputmodus van de API (zoals responseSchema bij Gemini). Dat dwingt geldige JSON af. Het schema alleen in de prompt zetten werkt ook, maar geeft net iets meer kans op afwijkende output.

Extractieprompts zijn de ruggengraat van documentautomatisering. Goed ontworpen extractie-pipelines besparen enorme hoeveelheden handmatige invoertijd en maken downstream automatisering mogelijk.