Skip to content

Dokumente und PDFs annotieren

Verträge, Berichte und Fachartikel als Dokumente annotieren statt als plattgemachten Text, sodass Layout, Seitenzahlen und seitenübergreifende Verweise erhalten bleiben.

Annotieren Sie ein Dokument auf seinen gerenderten Seiten statt auf dem daraus extrahierten Text, weil das Layout Bedeutung trägt, die die Extraktion wegwirft, und weil eine prüfende Person das Label auf der Seite wiederfinden muss. Einen Vertrag zu einer Zeichenkette plattzumachen kostet die Seitenzahl, die Spaltenreihenfolge, die Tabellenstruktur und den Unterschied zwischen Fußnote und Fließtext.

Dokumentannotation ist der Fall, in dem das übliche Setup für Textannotation versagt. Ein PDF ist eine Beschreibung von Markierungen auf Seiten und keine Folge von Zeichen, also liefern zwei verschiedene Extraktoren aus derselben Datei zwei verschiedene Zeichenketten. Mehrspaltige Seiten verschränken sich, Kopf- und Fußzeilen tauchen mitten im Fluss auf, und Tabellen werden zu Leerzeichenkolonnen. Wer diese Zeichenkette labelt, labelt ein Artefakt des Extraktors, und wer später das Original öffnet, kann nicht immer sagen, auf welche Passage sich eine Spanne bezog.

Position, Seitenzahl und Verweisstruktur

Drei Eigenschaften eines Dokuments überleben auf der Seite und nicht in seinem extrahierten Text. Die Position sagt einer prüfenden Person, ob eine Klausel eine Überschrift, eine Fußnote oder Fließtext ist, und die Extraktion reduziert alle drei auf dieselbe ununterschiedene Zeichenfolge. Die Seitenzahl ist, worüber jede spätere Leserin die Passage zitieren wird, und sie existiert nur, solange die Seiten existieren. Die Verweisstruktur hält fest, worauf eine Passage zeigt, und das zählt immer dann, wenn eine Behauptung auf einer Seite auf einer Tabelle neun Seiten später ruht.

Die dritte Eigenschaft erzwingt am häufigsten einen Werkzeugwechsel. Verweisstruktur innerhalb eines Dokuments ist eine Relation zwischen zwei Orten, und ein Werkzeug, das ein Dokument als eine flache Zeichenkette modelliert, hat keinen Platz für den zweiten Ort. Juristische Prüfung, wissenschaftliche Behauptungsverifikation und Analyse von Finanzberichten hängen alle an dieser Relation.

Drei Ankerarten

Eine Annotation auf einem Dokument ist auf eine von drei Weisen verankert, und die Wahl folgt der Frage, nicht der Vorliebe.

  • Textspannen verankern an ausgewählten Wörtern und passen zu Fragen nach der Formulierung. Eine Spanne setzt voraus, dass das Dokument eine Textebene trägt, die digital erzeugte PDFs haben und Scans nicht.
  • Regionsrahmen verankern an Seitenkoordinaten und passen zu Abbildungen, Tabellen, Stempeln, Unterschriften und allem, was eine Textebene nie erfasst hat. Sie funktionieren auf einem Scan ganz ohne Textextraktion.
  • Verknüpfungen verbinden zwei Anker und passen zur Verweisstruktur. Eine Verknüpfung hält eine typisierte, wahlweise gerichtete Relation zwischen zwei Stellen im Dokument fest.

Ankerarten in einer Aufgabe zu mischen ist normal. Eine Aufgabe zur Behauptungsverifikation markiert Behauptungen als Textspannen, Tabellen als Regionsrahmen und verbindet sie mit Verknüpfungen.

Konfiguration in Potato

Potatos pdf-Display rendert die Datei mit PDF.js und legt die Annotationsfläche auf die gerenderte Seite. Die Option annotation_mode wählt die Ankerart und nimmt span, bounding_box oder link. Der Link-Modus ist der, der die Verweisfrage beantwortet, und er hält Anker und Verknüpfungen unter getrennten Schema-Namen fest, sodass beide aus dem Export unterscheidbar herauskommen.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        annotation_mode: link
        view_mode: scroll
        zoom: page-width
        enable_text_anchors: true
        enable_region_anchors: true
        anchor_schema: pdf_anchors
        link_schema: pdf_links
        anchor_labels:
          - name: claim
            color: "#dc2626"
          - name: figure
            color: "#2563eb"
        link_types:
          - name: refers_to
            directed: true
            allowed_source_labels: [claim]
            allowed_target_labels: [figure]

view_mode: scroll stapelt die Seiten in einem Container, sodass eine Verknüpfung zwischen Seite 2 und Seite 9 als ein einziger Bogen gezogen und gesehen werden kann. Die paginierte Alternative zeigt eine Seite auf einmal, was sich auf einem langen Dokument besser liest, aber das ferne Ende einer seitenübergreifenden Verknüpfung verdeckt, während sie gezogen wird.

allowed_source_labels und allowed_target_labels sind das, was aus einer Richtlinie etwas macht, das die Oberfläche durchsetzt. Wie oben konfiguriert, kann eine refers_to-Verknüpfung nur an einer Behauptung beginnen und nur an einer Abbildung enden, sodass niemand die Relation verkehrt herum festhalten kann. Richtlinien, die nur in einem Dokument stehen, werden ungleichmäßig befolgt, und eine Einschränkung, die das Werkzeug anwendet, kostet in der Durchsetzung nichts.

Eine Word- oder Markdown-Datei nutzt stattdessen das document-Display, das Überschriften- und Absatzstruktur erhält und span_target akzeptiert, sodass ein Spannen-Schema direkt darauf zeigen kann.

Gescannte Dokumente

Ein Scan trägt keine Textebene, also finden Textanker nichts, woran sie sich hängen könnten. Es gibt zwei Möglichkeiten, und sie passen zu verschiedenen Korpora. Nach Region zu annotieren braucht überhaupt keinen Text und funktioniert sofort. OCR einzuschalten baut serverseitig eine Textebene auf und macht Textanker möglich, um den Preis eines langsamen Durchlaufs und einer Tesseract-Abhängigkeit.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      display_options:
        annotation_mode: link
        ocr: auto

auto führt OCR nur aus, wenn die eingebettete Textebene leer zurückkommt, und das ist die Einstellung für ein Korpus, das digital erzeugte Dateien mit Scans mischt. Potato liest die Option ocr nur im Link-Modus.

OCR-Ausgabe ist fehlerhaft, und eine Annotation, die an einem falsch erkannten Wort hängt, erbt den Fehler. In einem Korpus mit schlechter Erkennungsqualität geben Regionsanker eine haltbarere Aufzeichnung als Textanker, weil ein Rahmen um eine Passage richtig bleibt, was immer die Zeichen darunter gelesen wurden.

Ein Label gegen die Quelle prüfen

Jede Annotation kommt mit der Seite zurück, auf der sie sitzt, und das macht das Label gegen die Quelle prüfbar. Wer eine Seitenzahl und eine Region bekommt, kann das Original öffnen und das Urteil bestätigen. Wer einen Zeichen-Offset in eine zusammengefügte Zeichenkette bekommt, kann das in der Regel nicht, denn den Offset zu reproduzieren heißt, genau den Extraktor und die Version zu reproduzieren, die ihn erzeugt haben.

Wo der Ansatz mehr kostet, als er einbringt, ist ein Korpus aus kurzen, einspaltigen, digital erzeugten Dokumenten ohne Verweisstruktur, wo die Extraktion zuverlässig ist und die Seitenzahl nichts trägt. Schlichte Spannenannotation über extrahiertem Text ist dort einfacher und gibt dieselbe Antwort.

Weiterführend