Zum Inhalt

Dokument auslesen (OCR)

Der Service Task „Dokument auslesen (OCR)" liest PDFs und Bilder in einem einzigen Verarbeitungsschritt aus. Erkannt werden Volltext, Layout-Bereiche (Überschriften, Absätze, Header und Footer), Tabellen, mathematische Formeln und Stempel. Zusätzlich wird ein RAG-optimiertes Markdown des gesamten Dokuments geliefert.

So lassen sich eingehende Geschäftsdokumente wie Lieferscheine, Rechnungen, Verträge oder Formulare automatisiert auslesen und in nachfolgenden Prozessschritten – z. B. mit dem Service Task „KI: Daten aus OCR extrahieren" – in strukturierte Daten überführen.


Input-Parameter

Die folgenden Felder werden als Eingabe für den Task benötigt:

{
  "document": {
    "referenceId": "...",
    "filename": "lieferschein.pdf"
  }
}

Erläuterung:

  • document.referenceId: Referenz auf die hochgeladene Datei. Die Datei muss als fileReference vorliegen, z. B. aus einem Datei-Upload-Schritt im Formular oder aus einem vorherigen Service Task.
  • document.filename: Der Dateiname inkl. Endung. Anhand der Endung wird das Format erkannt.

Unterstützte Formate:

  • PDF (.pdf)
  • Bilder: PNG, JPG/JPEG, BMP, TIFF, WEBP

PDFs und Bilder können denselben Prozess durchlaufen – z. B. ein per Smartphone fotografierter Lieferschein und ein als PDF eingescannter Lieferschein.


Output

Der Task liefert ein strukturiertes JSON mit allen erkannten Inhalten:

{
  "metadata": {
    "source_file": "lieferschein.pdf",
    "total_pages": 1,
    "total_text_blocks": 49,
    "total_blocks": 12,
    "total_tables": 1,
    "total_formulas": 0,
    "total_seals": 1,
    "extraction_engine": "PPStructureV3"
  },
  "markdown": "# Lieferschein Nr. 7208166\n\nDatum: 19.03.2025\n\n| Pos | Menge | Artikel |\n|-----|-------|---------|\n| 1 | 100 | Schrauben M8 |",
  "full_text": "Lieferschein Nr. 7208166\nDatum: 19.03.2025\nPSL GmbH",
  "pages": [
    {
      "page_number": 0,
      "markdown": "# Lieferschein Nr. 7208166\n...",
      "text": "Lieferschein Nr. 7208166\nDatum: 19.03.2025\nPSL GmbH",
      "blocks": [
        { "label": "doc_title", "content": "Lieferschein Nr. 7208166", "bbox": [120, 80, 480, 110] },
        { "label": "header", "content": "Pantarey GmbH", "bbox": [80, 40, 240, 60] },
        { "label": "paragraph_title", "content": "Datum: 19.03.2025", "bbox": [120, 130, 320, 150] }
      ],
      "tables": [
        { "index": 0, "html": "<table><tr><td>Pos</td><td>Menge</td></tr><tr><td>1</td><td>100</td></tr></table>" }
      ],
      "text_blocks": [
        { "text": "Lieferschein Nr. 7208166", "confidence": 0.98 }
      ],
      "formulas": [],
      "seals": [
        { "text": "Pantarey GmbH" }
      ]
    }
  ]
}

Erläuterung:

  • metadata: Zusammenfassung der Erkennung (Seitenanzahl, Anzahl erkannter Blöcke, Tabellen, Formeln, Stempel).
  • markdown: RAG-optimiertes Markdown des gesamten Dokuments – ideal als Eingabe für KI-Services. Header, Footer und Seitenzahlen werden hier bewusst ausgeblendet (diese stehen in pages[].blocks).
  • full_text: Der komplette Volltext aller Seiten als Fließtext.
  • pages: Array mit einem Eintrag pro Seite. Jede Seite enthält:
    • markdown: Markdown der einzelnen Seite.
    • text: Volltext der Seite.
    • blocks: Layout-Blöcke mit semantischem Label (z. B. doc_title, header, footer, page_number, paragraph_title, text). Hier stehen Titel, Header und Footer.
    • tables: Erkannte Tabellen als HTML – die Cell-Struktur bleibt auch bei komplexen Layouts erhalten.
    • text_blocks: Einzelne OCR-Textfragmente mit Konfidenzwert (confidence, 0–1).
    • formulas: Mathematische Formeln als LaTeX.
    • seals: In Stempeln erkannter Text – nützlich, um Aussteller oder unterschreibende Firma zu identifizieren.

JSONata-Beispiele

// Datei aus einem Upload-Schritt referenzieren
{
  "document": {
    "referenceId": $.fileUpload.referenceId,
    "filename": $.fileUpload.filename
  }
}
// Markdown direkt an einen KI-Service weiterreichen
{
  "content": $.ocrResult.markdown,
  "questions": [
    {
      "question": "Wie lautet die Lieferscheinnummer?",
      "attribute": "deliveryNoteNumber"
    }
  ]
}
// Prüfen, ob Tabellen erkannt wurden (Gateway-Bedingung)
$.ocrResult.metadata.total_tables > 0

Hinweise

  • Die Verarbeitungszeit beträgt je nach Dokumentgröße ca. 30–120 Sekunden.
  • Mehrseitige PDFs werden vollständig verarbeitet – jede Seite erscheint als eigenes Element im pages-Array.
  • Der confidence-Wert eines Textfragments eignet sich zur Qualitätsbewertung – Werte unter 0.7 deuten auf unsichere Erkennung hin.
  • Der Inhalt von markdown und pages[].blocks überlappt sich teilweise bewusst, weil PaddleX header/footer/page_number aus dem Markdown herausfiltert. Für KI-Folgeschritte ist genau diese Trennung hilfreich.
  • Stempel-Erkennung funktioniert besonders gut bei klar abgegrenzten, kreisförmigen Firmenstempeln.
  • Handgeschriebene Inhalte werden mit erkannt, sind aber generell weniger zuverlässig als gedruckter Text.

Tipp

Die Kombination mit dem Service Task „KI: Daten aus OCR extrahieren" ist besonders effektiv: Zuerst wird das Dokument per OCR ausgelesen, anschließend werden gezielt typisierte Felder, Positionslisten (z. B. Artikel mit Menge und Preis) und ein Schlüssel-Wert-Index extrahiert. So entsteht aus zwei Service Tasks ein vollständiger Workflow von der eingegangenen Datei bis zu strukturierten Daten.