CEL-Dialekt für die Dokumentvalidierung

Bei der Validierung und Korrektur mit Document AI wird die Common Expression Language (CEL) verwendet, um eine flexible Datenvalidierung und ‑bearbeitung in Ihren Dokumentverarbeitungs-Workflows zu ermöglichen. Document AI bietet eine Reihe von benutzerdefinierten Funktionen, Makros und Verhaltensänderungen, die auf Daten zu Dokumententitäten zugeschnitten sind.

Auf Entitäten im CEL-Ausdruck zugreifen

Alle Ausdrücke werden anhand einer Stammvariablen namens doc ausgewertet, die aus Entitäten besteht, die Phrasen oder Eigenschaften des Dokuments sind. Diese Entitäten folgen eng der Struktur der Entitäten Ihres extrahierten Dokuments.

Eine extrahierte Entität enthält viele Eigenschaften, aber nur drei davon sind für die CEL-Auswertung verfügbar.

  • mention_text: Der extrahierte Rohtext, wie er in einer extrahierten Entität vorhanden ist. Der Standardwert ist ein leerer String.
  • normalized_value: Normalisierter Erwähnungstext, wie er in einer extrahierten Entität vorhanden ist. Der Standardwert ist „null“. Weitere Informationen zur Normalisierung
  • bounding_poly: Ein spezielles Objekt, das eine Darstellung der Platzierung der extrahierten Einheit im Dokument enthält und für Abgleichsprüfungen verwendet wird. Der Standardwert ist null.

Datenmodell

Die genaue Struktur einer extrahierten Entität in der doc-Karte hängt von zwei Faktoren ab. Erstens: Ist die Struktur ein konkreter Wert wie eine Zahl oder ein Nur-Text oder ein komplexes Objekt? Der zweite Faktor ist, ob der Ereignistyp „einzeln“ oder „mehrfach“ ist. Weitere Informationen finden Sie unter OccurrenceType.

Ein wichtiges Merkmal des Validierungsdatenmodells ist, dass jede im Schema definierte, aber nicht aus dem Dokument extrahierte Entität automatisch mit Standardwerten gefüllt wird. Dadurch können Sie die meisten expliziten Nullprüfungen in Ihren CEL-Ausdrücken überspringen, was Ihre Validierungsausdrücke erheblich vereinfacht. Sie müssen nur explizit Nullprüfungen schreiben, um sicherzustellen, dass eine ausgewählte Entität tatsächlich extrahiert wurde.

Beispiele für Endknotenentitäten

In den folgenden Abschnitten wird beschrieben, wie Sie auf die Entitäten in einer Blattentität zugreifen, die keine verschachtelten untergeordneten Entitäten enthält. Blattentitäten enthalten direkt einen Wert.

Blattentität mit einem einzelnen Vorkommen

Dies ist der einfachste Fall, bei dem OccurrenceType von OPTIONAL_ONCE oder REQUIRED_ONCE verwendet wird. Die Entität wird als Objekt mit den drei Standardattributen dargestellt.

Ein Beispiel für den Zugriff auf diese Werte ist doc.invoice_date.normalized_value.

Sie hat die folgende Struktur:

  "invoice_date": {
    "mention_text": "1",
    "normalized_value": 1.0,
    "bounding_poly": bounding_poly_object
  }

Und Standardwert:

  "invoice_date": {
    "mention_text": "",
    "normalized_value": null,
    "bounding_poly": null
  }

Blattknoten mit mehreren Vorkommen

Dieser Fall gilt für Blatttypen, die mehrmals vorkommen können und einen OccurrenceType-Wert von OPTIONAL_MULTIPLE oder REQUIRED_MULTIPLE haben. In einer Liste mit Fälligkeitsdaten für Zahlungen wird sie beispielsweise als Objekt dargestellt, wobei jede Eigenschaft eine Liste der entsprechenden Werte aus allen Vorkommen enthält. Attribute wie mention_text, normalized_value und bounding_poly können also mehrere Einheiten haben.

Ein Beispiel für den Zugriff auf diese Werte ist doc.payment_due_dates.normalized_value[0].

Sie hat die folgende Struktur:

  "payment_due_dates": {
    "mention_text": ["Mar 1, 2024", "Apr 1, 2024"],
    "normalized_value": [null, proto.timestamp(2024-04-01)],
    // Note: If a value is not normalized, it is stored as a null.
    "bounding_poly": [bounding_poly_object,bounding_poly_object]
  }

Und Standardwert:

  "payment_due_dates": {
    "mention_text": [],
    "normalized_value": []
    "bounding_poly": []
  }

Verschachtelte Entitäten

Eine verschachtelte Entität ist ein Container für andere Entitäten, die ihre „untergeordneten Elemente“ sind.

Verschachtelte Entität mit einem Vorkommen

Wenn eine verschachtelte Entität nur einmal vorkommt, z. B. ein einzelnes receiver_address, wird sie als Objekt dargestellt, wobei die Schlüssel die Namen der untergeordneten Entitäten sind.

Ein Beispiel für den Zugriff auf diese Werte ist doc.receiver_address.city.mention_text.

Sie hat die folgende Struktur:

  "receiver_address": {
    "street": {
      "mention_text": "123 Main St",
      "normalized_value": "123 Main St",
      "bounding_poly":