KI: Daten aus OCR extrahieren
Der Service Task „KI: Daten aus OCR extrahieren" verarbeitet das Ergebnis des Service Tasks „Dokument auslesen (OCR)" und liefert strukturierte Daten zurück. Aus dem kombinierten OCR-Output (Markdown, Layout-Blöcke, Tabellen, Stempel und Textfragmente) werden gezielt typisierte Felder, Positionslisten (z. B. Artikel mit Menge und Preis) und ein automatischer Schlüssel-Wert-Index für die spätere Suche extrahiert.
Der Task ist generisch und eignet sich für beliebige Geschäftsdokumente – z. B. Lieferscheine, Rechnungen, Verträge, Bestellungen, Zeugnisse oder Formulare. Eine optionale Beschreibung des Dokumententyps und die typisierte Definition jedes Feldes sorgen für deutlich präzisere Ergebnisse als eine generische Text-Extraktion.
Input-Parameter
Die folgenden Felder werden als Eingabe für den Task benötigt:
{
"ocr": { },
"documentContext": "Lieferscheine deutscher Speditionen",
"schema": {
"deliveryNoteNumber": {
"type": "string",
"description": "Lieferschein-Nummer (z. B. LS-2024-001)"
},
"deliveryDate": {
"type": "date",
"description": "Lieferdatum im Format YYYY-MM-DD"
},
"customerName": {
"type": "string",
"description": "Name des Empfängers / Kunden"
},
"totalAmount": {
"type": "currency",
"description": "Gesamtbetrag (numerischer Wert in der Belegwährung)"
},
"paymentMethod": {
"type": "enum",
"values": ["cash", "invoice", "card"],
"description": "Zahlungsart"
}
},
"tables": {
"items": {
"description": "Positionsliste der gelieferten Artikel",
"columns": {
"pos": { "type": "integer" },
"article": { "type": "string" },
"quantity": { "type": "number" },
"price": { "type": "currency" }
}
}
},
"discoverAdditional": true,
"language": "de",
"maxContentLength": 50000
}
Erläuterung:
ocr: Der vollständige Output des Service Tasks „Dokument auslesen (OCR)" – also das Objekt mitmetadata,markdown,pagesetc.schema: Die zu extrahierenden Felder. Pro Feld werden Typ und Beschreibung angegeben. Unterstützte Typen:string– Textnumber– Dezimalzahlinteger– Ganzzahldate– Datum (YYYY-MM-DD)currency– Währungsbetrag (numerisch)iban– IBANemail– E-Mail-Adresseboolean–true/falseenum– einer aus einer festen Werteliste; zusätzlichvalues: ["..."]angeben
tables(optional): Tabellen, die als Positionslisten zurückgeliefert werden sollen. Pro Tabelle wird eine Beschreibung und das Spaltenschema (Name + Typ) angegeben. Die Werte werden als Array von Objekten zurückgeliefert.documentContext(optional): Eine kurze Beschreibung des Dokumententyps. Hilft der KI, mehrdeutige Beschriftungen wie „Nr." korrekt zuzuordnen (z. B. Lieferschein-Nr. statt Rechnungs-Nr.).discoverAdditional(optional, Standard:false): Wenntrue, werden zusätzlich alle weiteren erkennbaren Schlüssel-Wert-Paare zurückgegeben – nützlich als Volltext-Suchindex.language(optional, Standard:de): Sprache der Beschriftungen indiscoveredKeyValues.maxContentLength(optional, Standard:50000): Maximale Zeichenanzahl der OCR-Inhalte, die an die KI übergeben werden.
Output
Der Task liefert ein strukturiertes JSON-Objekt:
{
"fields": {
"deliveryNoteNumber": "LS-2024-001",
"deliveryDate": "2024-03-15",
"customerName": "Müller GmbH",
"totalAmount": 3425.0,
"paymentMethod": "invoice"
},
"positions": {
"items": [
{ "pos": 1, "article": "Schrauben M8", "quantity": 100, "price": 0.45 },
{ "pos": 2, "article": "Muttern M8", "quantity": 100, "price": 0.18 }
]
},
"discoveredKeyValues": [
{ "key": "Lieferadresse", "value": "Industriestr. 5, 70469 Stuttgart" },
{ "key": "Bestellreferenz", "value": "PO-7788" }
],
"notFound": []
}
Erläuterung:
fields: Die imschemadefinierten Felder mit typgerechten Werten. Felder, die im Dokument nicht gefunden wurden, sindnullund erscheinen zusätzlich innotFound.positions: Nur enthalten, wenntablesdefiniert wurde. Pro Tabelle wird ein Array von Objekten zurückgeliefert – die Schlüssel entsprechen den definierten Spalten.discoveredKeyValues: Nur enthalten, wenndiscoverAdditional: truegesetzt war. Eine Liste aller weiteren erkennbaren Schlüssel-Wert-Paare (max. 60 Einträge). Eignet sich gut als Volltext-Suchindex.notFound: Liste der Schema-Feldnamen, für die kein Wert gefunden werden konnte.
JSONata-Beispiele
// OCR-Ergebnis direkt aus dem vorherigen Schritt übergeben
{
"ocr": $.ocrResult,
"documentContext": "Lieferscheine",
"schema": {
"deliveryNoteNumber": { "type": "string", "description": "Lieferschein-Nummer" },
"deliveryDate": { "type": "date", "description": "Lieferdatum" },
"customerName": { "type": "string", "description": "Empfänger / Kunde" }
}
}
// Positionsliste mit Spalten extrahieren
{
"ocr": $.ocrResult,
"documentContext": "Rechnungen",
"schema": {
"invoiceNumber": { "type": "string", "description": "Rechnungsnummer" },
"invoiceDate": { "type": "date", "description": "Rechnungsdatum" },
"totalAmount": { "type": "currency", "description": "Gesamtbetrag" }
},
"tables": {
"items": {
"description": "Rechnungspositionen",
"columns": {
"article": { "type": "string" },
"quantity": { "type": "number" },
"price": { "type": "currency" }
}
}
}
}
// Mit Suchindex für späteres Wiederfinden im Data Lake
{
"ocr": $.ocrResult,
"schema": {
"documentNumber": { "type": "string", "description": "Belegnummer" }
},
"discoverAdditional": true,
"language": "de"
}
Hinweise
- Der Task setzt zwingend ein OCR-Ergebnis aus dem Service Task „Dokument auslesen (OCR)" voraus.
- Eine präzise
descriptionpro Feld verbessert die Trefferquote deutlich (z. B. „Datum im Format YYYY-MM-DD" statt nur „Datum"). - Bei
documentContextreicht eine kurze Beschreibung – die KI nutzt diese, um Felder von ähnlichen Dokumenttypen zu unterscheiden (z. B. „Lieferschein-Nr." vs. „Rechnungs-Nr."). - Werte werden so extrahiert, wie sie im Dokument stehen – nur Typ-Konvertierungen (z. B. Datumsnormalisierung) werden vorgenommen.
- Wird ein Wert nicht zuverlässig gefunden, wird
nullzurückgegeben – die KI rät nicht. - Bei sehr großen OCR-Outputs kann
maxContentLengthangehoben werden. - Der Task verwendet ein leistungsfähiges Sprachmodell und benötigt typischerweise 5–20 Sekunden – abhängig von der Komplexität von Schema und Positionslisten.
Tipp
Mit nur zwei Service Tasks – „Dokument auslesen (OCR)" gefolgt von „KI: Daten aus OCR extrahieren" – lässt sich ein vollständiger Workflow von der eingegangenen Datei (PDF oder Bild) bis zu strukturierten Daten im Data Lake abbilden. In Kombination mit discoverAdditional: true entsteht zusätzlich automatisch ein Suchindex, mit dem Belege später auch über Felder gefunden werden, die nicht im Schema definiert waren.