Dialetto CEL per la convalida dei documenti

La convalida e la correzione di Document AI sfruttano il Common Expression Language (CEL) per consentire la manipolazione e la convalida flessibili dei dati all'interno dei workflow di elaborazione dei documenti. Document AI offre un insieme di funzioni personalizzate, macro e modifiche comportamentali personalizzate per i dati delle entità dei documenti.

Accedere alle entità nell'espressione CEL

Tutte le espressioni vengono valutate in base a una variabile radice denominata doc, che è costituita da entità che sono frasi o proprietà appartenenti al documento. Queste entità seguono da vicino la struttura delle entità del documento estratto.

Sebbene un'entità estratta contenga molte proprietà, solo tre sono disponibili per la valutazione CEL.

  • mention_text: testo estratto non elaborato presente in un'entità estratta. Il valore predefinito è una stringa vuota.
  • normalized_value: testo della menzione normalizzato presente in un'entità estratta. Il valore predefinito è null. Scopri di più sulla normalizzazione.
  • bounding_poly: un oggetto speciale contenente una rappresentazione del posizionamento dell'entità estratta nel documento e utilizzato per i controlli di allineamento. Il valore predefinito è null.

Modello dei dati

La struttura esatta di un'entità estratta all'interno della mappa doc dipende da due fattori. Il primo è se la sua struttura è un valore concreto, ad esempio un numero o un testo normale, o se è un oggetto complesso. Il secondo fattore è se il tipo di occorrenza è singolo o multiplo. Per saperne di più, consulta OccurrenceType.

Una caratteristica fondamentale del modello dei dati di convalida è che qualsiasi entità definita nello schema, ma non estratta dal documento, viene compilata automaticamente con i valori predefiniti. Questo design ti consente di saltare la maggior parte dei controlli null espliciti nelle espressioni CEL, semplificando notevolmente le espressioni di convalida. Devi solo scrivere esplicitamente i controlli null per assicurarti che un'entità selezionata sia stata estratta.

Esempi di casi di entità foglia

Le sezioni seguenti descrivono come accedere alle entità in un'entità foglia, ovvero un'entità senza entità secondarie nidificate. Le entità foglia contengono direttamente un valore.

Entità foglia con una singola occorrenza

Questo è il caso più semplice, in cui si utilizza OccurrenceType di OPTIONAL_ONCE o REQUIRED_ONCE. L'entità è rappresentata come un oggetto contenente le tre proprietà standard.

Un esempio di come accedere a questi valori è doc.invoice_date.normalized_value.

Ha la struttura:

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

E il valore predefinito:

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

Entità foglia con più occorrenze

Questo caso si applica alle entità foglia che possono verificarsi più volte e hanno un OccurrenceType di OPTIONAL_MULTIPLE o REQUIRED_MULTIPLE. Ad esempio, in un elenco di date di scadenza dei pagamenti, è rappresentato come un oggetto in cui ogni proprietà contiene un elenco dei valori corrispondenti di tutte le occorrenze. Pertanto, proprietà come mention_text, normalized_value e bounding_poly potrebbero avere più entità.

Un esempio di come accedere a questi valori è doc.payment_due_dates.normalized_value[0].

Ha la struttura:

  "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]
  }

E il valore predefinito:

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

Entità nidificate

Un'entità nidificata è un contenitore per altre entità, che sono i suoi "elementi secondari".

Entità nidificata con una occorrenza

Se un'entità nidificata si verifica una sola volta, ad esempio un singolo receiver_address, viene rappresentata come un oggetto in cui le chiavi sono i nomi delle entità secondarie.

Un esempio di come accedere a questi valori è doc.receiver_address.city.mention_text.

Ha la struttura:

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

E il valore predefinito:

  "receiver_address": {
    "street": {
      "mention_text": "",
      "normalized_value": null,
      "bounding_poly": null
    }
    }

Entità nidificata con più occorrenze

Quando un'entità nidificata può verificarsi più volte, viene rappresentata come un elenco di oggetti. Ogni oggetto dell'elenco rappresenta un'istanza completa dell'entità nidificata e contiene i relativi elementi secondari.

Un esempio di come accedere a questi valori è doc.line_items[1].description.normalized_value.

Ha la struttura: