Gérer la réponse de traitement
La réponse à une requête de traitement contient un objet Document
qui contient toutes les informations connues sur le document traité, y compris toutes les informations structurées que Document AI a pu extraire.
Cette page explique la mise en page de l'objet Document
en fournissant des exemples de documents, puis en mappant les aspects des résultats d'OCR aux éléments spécifiques de l'objet JSON Document
.
Elle fournit également des exemples de code pour les bibliothèques clientes et le SDK Document AI Toolbox.
Ces exemples de code utilisent le traitement en ligne, mais l'analyse des objets Document
fonctionne de la même manière pour le traitement par lot.
Utilisez un lecteur ou un utilitaire de modification JSON spécialement conçu pour développer ou réduire des éléments. Examiner le code JSON brut dans un utilitaire de texte brut est inefficace.
Niveaux de qualité du texte, de la mise en page et de la qualité
Voici un exemple de document texte:
Voici l'objet de document complet tel qu'il est renvoyé par le processeur Enterprise Document OCR:
Cette sortie OCR est également toujours incluse dans la sortie du processeur Document AI, car l'OCR est exécuté par les processeurs. Il utilise les données OCR existantes. C'est pourquoi vous pouvez saisir ces données JSON à l'aide de l'option de document intégré dans les processeurs Document AI.
image=None, # all our samples pass this var
mime_type="application/json",
inline_document=document_response # pass OCR output to CDE input - undocumented
Voici quelques-uns des champs importants:
Texte brut
Le champ text
contient le texte reconnu par Document AI.
Ce texte ne contient aucune structure de mise en page autre que des espaces, des tabulations et des retours à la ligne. Il s'agit du seul champ qui stocke les informations textuelles d'un document et sert de référence pour le texte du document. D'autres champs peuvent faire référence à des parties du champ de texte par position (startIndex
et endIndex
).
{
text: "Sample Document\nHeading 1\nLorem ipsum dolor sit amet, ..."
}
Taille de la page et langues
Chaque page
de l'objet document correspond à une page physique de l'exemple de document. L'exemple de sortie JSON contient une seule page, car il s'agit d'une seule image PNG.
{
"pages:" [
{
"pageNumber": 1,
"dimension": {
"width": 679.0,
"height": 460.0,
"unit": "pixels"
},
}
]
}
- Le champ
pages[].detectedLanguages[]
contient les langues détectées sur une page donnée, ainsi que le score de confiance.
{
"pages": [
{
"detectedLanguages": [
{
"confidence": 0.98009938,
"languageCode": "en"
},
{
"confidence": 0.01990064,
"languageCode": "und"
}
]
}
]
}
Données OCR
La OCR Document AI détecte le texte avec une granularité ou une organisation variée sur la page, comme les blocs de texte, les paragraphes, les jetons et les symboles (le niveau de symbole est facultatif, s'il est configuré pour générer des données au niveau du symbole). Il s'agit de membres de l'objet de page.
Chaque élément est associé à un layout
qui décrit sa position et son texte. Les éléments visuels non textuels (tels que les cases à cocher) se trouvent également au niveau de la page.
{
"pages": [
{
"paragraphs": [
{
"layout": {
"textAnchor": {
"textSegments": [
{
"endIndex": "16"
}
]
},
"confidence": 0.9939527,
"boundingPoly": {
"vertices": [ ... ],
"normalizedVertices": [ ... ]
},
"orientation": "PAGE_UP"
}
}
]
}
]
}
Le texte brut est référencé dans l'objet textAnchor
, qui est indexé dans la chaîne de texte principale avec startIndex
et endIndex
.
Pour
boundingPoly
, l'origine(0,0)
est l'angle supérieur gauche de la page. Les valeurs X positives se trouvent à droite, et les valeurs Y positives vers le bas.L'objet
vertices
utilise les mêmes coordonnées que l'image d'origine, tandis quenormalizedVertices
se trouve dans la plage[0,1]
. Une matrice de transformation indique les mesures de déformation et d'autres attributs de la normalisation de l'image.
- Pour dessiner le
boundingPoly
, tracez des segments de ligne d'un sommet à l'autre. Ensuite, fermez le polygone en traçant un segment de ligne du dernier sommet au premier. L'élément orientation de la mise en page indique si le texte a été pivoté par rapport à la page.
Pour vous aider à visualiser la structure du document, les images suivantes dessinent des polygones de délimitation pour page.paragraphs
, page.lines
et page.tokens
.
Paragraphes
Lignes
Jetons
Blocs
Le processeur Enterprise Document OCR peut évaluer la qualité d'un document en fonction de sa lisibilité.
- Vous devez définir le champ
processOptions.ocrConfig.enableImageQualityScores
surtrue
pour obtenir ces données dans la réponse de l'API.
Cette évaluation de la qualité est un niveau de qualité en [0, 1]
, où 1
signifie qualité parfaite.
Le niveau de qualité est renvoyé dans le champ Page.imageQualityScores
.
Tous les défauts détectés sont listés comme quality/defect_*
et triés par ordre décroissant en fonction de la valeur de confiance.
Voici un PDF trop sombre et flou pour être lu confortablement:
Voici les informations sur la qualité des documents renvoyées par le processeur Enterprise Document OCR:
{
"pages": [
{
"imageQualityScores": {
"qualityScore": 0.7811847,
"detectedDefects": [
{
"type": "quality/defect_document_cutoff",
"confidence": 1.0
},
{
"type": "quality/defect_glare",
"confidence": 0.97849524
},
{
"type": "quality/defect_text_cutoff",
"confidence": 0.5
}
]
}
}
]
}
Exemples de code
Les exemples de code suivants montrent comment envoyer une requête de traitement, puis lire et imprimer les champs dans le terminal:
Java
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Java.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Node.js.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Formulaires et tableaux
Voici un exemple de formulaire:
Voici l'objet de document complet tel qu'il est renvoyé par l'analyseur de formulaires:
Voici quelques-uns des champs importants:
L'analyseur de formulaires peut détecter FormFields
sur la page. Chaque champ de formulaire possède un nom et une valeur. On les appelle également paires clé-valeur. Notez que les KVP sont différents des entités (schémas) dans d'autres extracteurs:
Les noms des entités sont configurés. Les clés des KVP correspondent littéralement au texte clé du document.
{
"pages:" [
{
"formFields": [
{
"fieldName": { ... },
"fieldValue": { ... }
}
]
}
]
}
- L'IA pour les documents peut également détecter
Tables
sur la page.
{
"pages:" [
{
"tables": [
{
"layout": { ... },
"headerRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
],
"bodyRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
]
}
]
}
]
}
L'extraction de tableaux dans l'analyseur de formulaires ne reconnaît que les tableaux simples, c'est-à-dire ceux sans cellules s'étendant sur plusieurs lignes ou colonnes. rowSpan
et colSpan
sont donc toujours 1
.
À partir de la version de processeur
pretrained-form-parser-v2.0-2022-11-10
, l'outil d'analyse des formulaires peut également reconnaître des entités génériques. Pour en savoir plus, consultez la section Analyseur de formulaire.Pour vous aider à visualiser la structure du document, les images suivantes dessinent des polygones de délimitation pour
page.formFields
etpage.tables
.Cases à cocher dans les tableaux. L'analyseur de formulaires peut numériser les cases à cocher à partir d'images et de PDF en tant que KVP. Exemple de numérisation de cases à cocher sous forme de paire clé-valeur.
En dehors des tableaux, les cases à cocher sont représentées par des éléments visuels dans l'analyseur de formulaire. Mise en surbrillance des cases carrées avec des coches dans l'UI et l'unicode ✓ dans le fichier JSON.
"pages:" [
{
"tables": [
{
"layout": { ... },
"headerRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
],
"bodyRows": [
{
"cells": [
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
},
{
"layout": { ... },
"rowSpan": 1,
"colSpan": 1
}
]
}
]
}
]
}
]
}
Dans les tableaux, les cases à cocher apparaissent sous forme de caractères Unicode tels que ✓ (cochée) ou ☐ (décochée).
Les cases à cocher cochées ont la valeur filled_checkbox :under pages > x > formFields > x > fieldValue > valueType.
. Les cases à cocher non cochées ont la valeur unfilled_checkbox
.
Les champs de contenu affichent la valeur du contenu de la case à cocher en surbrillance ✓ au chemin pages>formFields>x>fieldValue>textAnchor>content
.
Pour vous aider à visualiser la structure du document, les images suivantes dessinent des polygones de délimitation pour page.formFields
et page.tables
.
Champs du formulaire
Tables
Exemples de code
Les exemples de code suivants montrent comment envoyer une requête de traitement, puis lire et imprimer les champs dans le terminal:
Java
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Java.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Node.js.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Entités, entités imbriquées et valeurs normalisées
De nombreux processeurs spécialisés extraient des données structurées basées sur un schéma bien défini. Par exemple, l'analyseur de factures détecte des champs spécifiques tels que invoice_date
et supplier_name
. Voici un exemple de facture:
Voici l'objet de document complet tel qu'il est renvoyé par l'analyseur de factures:
Voici quelques-unes des parties importantes de l'objet document:
Champs détectés:
Entities
contient les champs que le processeur a pu détecter, par exemple,invoice_date
:{ "entities": [ { "textAnchor": { "textSegments": [ { "startIndex": "14", "endIndex": "24" } ], "content": "2020/01/01" }, "type": "invoice_date", "confidence": 0.9938466, "pageAnchor": { ... }, "id": "2", "normalizedValue": { "text": "2020-01-01", "dateValue": { "year": 2020, "month": 1, "day": 1 } } } ] }
Pour certains champs, le processeur normalise également la valeur. Dans cet exemple, la date a été normalisée de
2020/01/01
à2020-01-01
.Normalisation: pour de nombreux champs pris en charge spécifiques, le processeur normalise également la valeur et renvoie également un
entity
. Le champnormalizedValue
est ajouté au champ extrait brut obtenu via letextAnchor
de chaque entité. Il normalise donc le texte littéral, en divisant souvent la valeur textuelle en sous-champs. Par exemple, une date comme le 1er septembre 2024 serait représentée comme suit:
normalizedValue": {
"text": "2020-09-01",
"dateValue": {
"year": 2024,
"month": 9,
"day": 1
}
Dans cet exemple, la date a été normalisée de 01/01/2020 à 2020-01-01, un format standardisé pour réduire le post-traitement et permettre la conversion au format choisi.
Les adresses sont également souvent normalisées, ce qui décompose les éléments de l'adresse en champs individuels. Les nombres sont normalisés en utilisant un nombre entier ou à virgule flottante comme normalizedValue
.
- Enrichissement: certains processeurs et champs sont également compatibles avec l'enrichissement.
Par exemple, le
supplier_name
d'origine du documentGoogle Singapore
a été normalisé enGoogle Asia Pacific, Singapore
par rapport à Enterprise Knowledge Graph. Notez également que, comme Enterprise Knowledge Graph contient des informations sur Google, Document AI infère lasupplier_address
, même si elle n'était pas présente dans l'exemple de document.
{
"entities": [
{
"textAnchor": {
"textSegments": [ ... ],
"content": "Google Singapore"
},
"type": "supplier_name",
"confidence": 0.39170802,
"pageAnchor": { ... },
"id": "12",
"normalizedValue": {
"text": "Google Asia Pacific, Singapore"
}
},
{
"type": "supplier_address",
"id": "17",
"normalizedValue": {
"text": "70 Pasir Panjang Rd #03-71 Mapletree Business City II Singapore 117371",
"addressValue": {
"regionCode": "SG",
"languageCode": "en-US",
"postalCode": "117371",
"addressLines": [
"70 Pasir Panjang Rd",
"#03-71 Mapletree Business City II"
]
}
}
}
]
}
Champs imbriqués: vous pouvez créer un schéma (champs) imbriqué en déclarant d'abord une entité comme parent, puis en créant des entités enfants sous le parent. La réponse d'analyse pour le parent inclut les champs enfants dans l'élément
properties
du champ parent. Dans l'exemple suivant,line_item
est un champ parent qui comporte deux champs enfants:line_item/description
etline_item/quantity
.{ "entities": [ { "textAnchor": { ... }, "type": "line_item", "confidence": 1.0, "pageAnchor": { ... }, "id": "19", "properties": [ { "textAnchor": { "textSegments": [ ... ], "content": "Tool A" }, "type": "line_item/description", "confidence": 0.3461604, "pageAnchor": { ... }, "id": "20" }, { "textAnchor": { "textSegments": [ ... ], "content": "500" }, "type": "line_item/quantity", "confidence": 0.8077843, "pageAnchor": { ... }, "id": "21", "normalizedValue": { "text": "500" } } ] } ] }
Les analyseurs suivants le font:
- Extraire (extracteur personnalisé)
- Ancien
- Analyseur de relevés bancaires
- Analyseur de dépenses
- Analyseur de factures
- Analyseur de bulletins de salaire
- Analyseur de formulaires W2
Exemples de code
Les exemples de code suivants montrent comment envoyer une requête de traitement, puis lire et imprimer les champs d'un processeur spécialisé sur le terminal:
Java
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Java.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Node.js.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Extracteur de documents personnalisé
L'outil d'extraction de documents personnalisé peut extraire des entités personnalisées à partir de documents pour lesquels aucun outil de traitement pré-entraîné n'est disponible. Pour ce faire, vous pouvez entraîner un modèle personnalisé ou utiliser des modèles de fondation d'IA générative pour extraire des entités nommées sans aucun entraînement. Pour en savoir plus, consultez Créer un extracteur de documents personnalisé dans la console.
- Si vous entraînez un modèle personnalisé, l'outil de traitement peut être utilisé exactement de la même manière qu'un outil d'extraction d'entités pré-entraîné.
- Si vous utilisez un modèle de base, vous pouvez créer une version de l'outil de traitement pour extraire des entités spécifiques pour chaque requête ou la configurer par requête.
Pour en savoir plus sur la structure de sortie, consultez Entités, entités imbriquées et valeurs normalisées.
Exemples de code
Si vous utilisez un modèle personnalisé ou que vous avez créé une version de l'outil de traitement à l'aide d'un modèle de fondation, utilisez les exemples de code d'extraction d'entités.
L'exemple de code suivant montre comment configurer des entités spécifiques pour un extracteur de documents personnalisé de modèle de base sur la base d'une requête et imprimer les entités extraites:
Python
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Synthèse
Le processeur de synthèse utilise des modèles de base d'IA générative pour résumer le texte extrait d'un document. Vous pouvez personnaliser la longueur et le format de la réponse de différentes manières:
- Longueur
BRIEF
: bref résumé d'une ou deux phrasesMODERATE
: résumé d'un paragrapheCOMPREHENSIVE
: option la plus longue disponible
- Format
Vous pouvez créer une version de processeur pour une longueur et un format spécifiques, ou la configurer par requête.
Le texte résumé apparaît dans Document.entities.normalizedValue.text
. Vous trouverez un exemple complet de fichier JSON de sortie dans Exemple de sortie du processeur.
Pour en savoir plus, consultez Créer un récapitulatif de document dans la console.
Exemples de code
L'exemple de code suivant montre comment configurer une longueur et un format spécifiques dans une requête de traitement, puis imprimer le texte résumé:
Python
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Fractionnement et classification
Voici un PDF composite de 10 pages contenant différents types de documents et de formulaires:
Voici l'objet de document complet tel qu'il est renvoyé par le séparateur et classificateur de documents de prêt:
Chaque document détecté par le séparateur est représenté par un entity
. Exemple :
{
"entities": [
{
"textAnchor": {
"textSegments": [
{
"startIndex": "13936",
"endIndex": "21108"
}
]
},
"type": "1040se_2020",
"confidence": 0.76257163,
"pageAnchor": {
"pageRefs": [
{
"page": "6"
},
{
"page": "7"
}
]
}
}
]
}
Entity.pageAnchor
indique que ce document comporte deux pages. Notez quepageRefs[].page
est basé sur zéro et qu'il s'agit de l'indice du champdocument.pages[]
.Entity.type
indique qu'il s'agit d'un formulaire 1040 Schedule SE. Pour obtenir la liste complète des types de documents pouvant être identifiés, consultez la section Types de documents identifiés dans la documentation du processeur.
Pour en savoir plus, consultez la section Comportement des séparateurs de documents.
Exemples de code
Les séparateurs identifient les limites de page, mais ne séparent pas réellement le document d'entrée. Vous pouvez utiliser la boîte à outils Document AI pour diviser physiquement un fichier PDF à l'aide des limites de page. Les exemples de code suivants impriment les plages de pages sans diviser le fichier PDF:
Java
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Java.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Node.js.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Document
traité.
Python
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Python.
Pour vous authentifier auprès de Document AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Boîte à outils Document AI
Document AI Toolbox est un SDK pour Python qui fournit des fonctions utilitaires permettant de gérer, de manipuler et d'extraire des informations de la réponse du document.
Il crée un objet de document "encapsulant" une réponse de document traitée à partir de fichiers JSON dans Cloud Storage, de fichiers JSON locaux ou de la sortie directement à partir de la méthode process_document()
.
Il peut effectuer les actions suivantes:
- Combinez les fichiers JSON
Document
fragmentés du traitement par lot dans un seul document "encapsulant". - Exportez les fragments en tant que
Document
unifié. -
Obtenez la sortie
Document
à partir de : - Accédez au texte de
Pages
,Lines
,Paragraphs
,FormFields
etTables
sans gérer les informationsLayout
. - Recherchez un
Pages
contenant une chaîne cible ou correspondant à une expression régulière. - Recherchez
FormFields
par nom. - Recherchez
Entities
par type. - Convertissez
Tables
en DataFrame Pandas ou en CSV. - Insérez
Entities
etFormFields
dans une table BigQuery. - Divisez un fichier PDF en fonction de la sortie d'un processeur de fractionnement/classification.
- Extrayez l'image
Entities
à partir des cadres de délimitationDocument
. -
Convertir
Documents
vers et depuis des formats couramment utilisés :- API Cloud Vision
AnnotateFileResponse
- hOCR
- Formats de traitement de documents tiers
- API Cloud Vision
- Créez des lots de documents à traiter à partir d'un dossier Cloud Storage.
Exemples de code
Les exemples de code suivants montrent comment utiliser Document AI Toolbox.