Controla la respuesta de procesamiento
La respuesta a una solicitud de procesamiento contiene un objeto Document
que contiene todo lo que se sabe sobre el documento procesado, incluida toda la información estructurada que Document AI pudo extraer.
En esta página, se explica el diseño del objeto Document
a través de la entrega de documentos de muestra y, luego, se asignan aspectos de los resultados de OCR a los elementos específicos del objeto JSON Document
.
También proporciona muestras de código de bibliotecas cliente y del SDK de Document AI Toolbox.
En estas muestras de código, se usa el procesamiento en línea, pero el análisis de objetos Document
funciona igual para el procesamiento por lotes.
Usa un visor de JSON o una utilidad de edición diseñada específicamente para expandir o contraer elementos. Revisar JSON sin procesar en una utilidad de texto sin formato no es eficiente.
Texto, diseño y niveles de calidad
Este es un documento de texto de muestra:
Este es el objeto de documento completo que muestra el procesador de Enterprise Document OCR:
Este resultado de OCR también se incluye siempre en el resultado del procesador de Document AI, ya que los procesadores ejecutan el OCR. Usa los datos de OCR existentes, por lo que puedes ingresar esos datos JSON con la opción de documento intercalado en los procesadores de 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
Estos son algunos de los campos importantes:
Texto sin procesar
El campo text
contiene el texto que reconoce Document AI.
Este texto no contiene ninguna estructura de diseño, excepto espacios, tabulaciones y líneas de alimentación. Este es el único campo que almacena la información textual
del documento y sirve como fuente de información del texto del documento. Otros
campos pueden hacer referencia a partes del campo de texto por posición (startIndex
y endIndex
).
{
text: "Sample Document\nHeading 1\nLorem ipsum dolor sit amet, ..."
}
Tamaño de la página y idiomas
Cada page
en el objeto de documento corresponde a una página física del documento de muestra. El resultado JSON de muestra contiene una página porque es una sola imagen PNG.
{
"pages:" [
{
"pageNumber": 1,
"dimension": {
"width": 679.0,
"height": 460.0,
"unit": "pixels"
},
}
]
}
- El campo
pages[].detectedLanguages[]
contiene los idiomas que se encuentran en una página determinada, junto con la puntuación de confianza.
{
"pages": [
{
"detectedLanguages": [
{
"confidence": 0.98009938,
"languageCode": "en"
},
{
"confidence": 0.01990064,
"languageCode": "und"
}
]
}
]
}
Datos de OCR
El OCR de Document AI detecta texto con varios niveles de detalle o organización en la página, como los bloques de texto, los párrafos, los tokens y los símbolos (el nivel de símbolo es opcional, si se configura para generar datos a nivel de símbolo). Estos son todos los miembros del objeto de página.
Cada elemento tiene un layout
correspondiente que describe su posición y texto. Los elementos visuales que no son de texto (como las casillas de verificación) también se encuentran a nivel de la página.
{
"pages": [
{
"paragraphs": [
{
"layout": {
"textAnchor": {
"textSegments": [
{
"endIndex": "16"
}
]
},
"confidence": 0.9939527,
"boundingPoly": {
"vertices": [ ... ],
"normalizedVertices": [ ... ]
},
"orientation": "PAGE_UP"
}
}
]
}
]
}
Se hace referencia al texto sin procesar en el objeto textAnchor
, que se indexa en la cadena de texto principal con startIndex
y endIndex
.
Para
boundingPoly
, la esquina superior izquierda de la página es el origen(0,0)
. Los valores positivos de X están a la derecha y los valores positivos de Y están hacia abajo.El objeto
vertices
usa las mismas coordenadas que la imagen original, mientras quenormalizedVertices
está en el rango[0,1]
. Hay una matriz de transformación que indica las medidas de desfase y otros atributos de la normalización de la imagen.
- Para dibujar el
boundingPoly
, dibuja segmentos de línea de un vértice al siguiente. Luego, dibuja un tramo de línea desde el último vértice hasta el primero para cerrar el polígono. El elemento orientation del diseño indica si el texto se rotó en relación con la página.
Para ayudarte a visualizar la estructura del documento, en las siguientes imágenes se dibujan polígonos de límite para page.paragraphs
, page.lines
y page.tokens
.
Párrafos
Líneas
Tokens
Bloques
El procesador de Enterprise Document OCR puede realizar una evaluación de calidad de un documento en función de su legibilidad.
- Debes configurar el campo
processOptions.ocrConfig.enableImageQualityScores
entrue
para obtener estos datos en la respuesta de la API.
Esta evaluación de calidad es un nivel de calidad en [0, 1]
, en el que 1
significa calidad perfecta.
El nivel de calidad se muestra en el campo Page.imageQualityScores
.
Todos los defectos detectados se enumeran como quality/defect_*
y se ordenan de forma descendente según el valor de confianza.
Este es un PDF demasiado oscuro y desenfocado para leerlo cómodamente:
Esta es la información de calidad del documento que muestra el procesador de 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
}
]
}
}
]
}
Muestras de código
En los siguientes ejemplos de código, se muestra cómo enviar una solicitud de procesamiento y, luego, leer e imprimir los campos en la terminal:
Java
Para obtener más información, consulta la documentación de referencia de la API de Document AI Java.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener más información, consulta la documentación de referencia de la API de Document AI Node.js.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener más información, consulta la documentación de referencia de la API de Document AI Python.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Formularios y tablas
Este es nuestro formulario de muestra:
Este es el objeto de documento completo que muestra el analizador de formularios:
Estos son algunos de los campos importantes:
El analizador de formularios puede detectar FormFields
en la página. Cada campo de formulario tiene un nombre y un valor. También se los llama pares clave-valor (KVK). Ten en cuenta que los KVP son diferentes de las entidades (esquema) en otros extractores:
Se configuran los nombres de las entidades. Las claves de los KVP son literalmente el texto clave del documento.
{
"pages:" [
{
"formFields": [
{
"fieldName": { ... },
"fieldValue": { ... }
}
]
}
]
}
- Document AI también puede detectar
Tables
en la página.
{
"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
}
]
}
]
}
]
}
]
}
La extracción de tablas dentro de Form Parser solo reconoce tablas simples, aquellas sin celdas que abarcan filas o columnas. Por lo tanto, rowSpan
y colSpan
siempre son 1
.
A partir de la versión
pretrained-form-parser-v2.0-2022-11-10
del procesador, Form Parser también puede reconocer entidades genéricas. Para obtener más información, consulta Sintetizador de formularios.Para ayudarte a visualizar la estructura del documento, en las siguientes imágenes se dibujan polígonos de límite para
page.formFields
ypage.tables
.Casillas de verificación en tablas. El analizador de formularios puede digitalizar las casillas de verificación de las imágenes y los archivos PDF como KVP. Proporciona un ejemplo de digitalización de casillas de verificación como un par clave-valor.
Fuera de las tablas, las casillas de verificación se representan como elementos visuales dentro de Form Parser. Destaca los cuadros cuadrados con marcas de verificación sobre la IU y el unicode ✓ en el 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
}
]
}
]
}
]
}
]
}
En las tablas, las casillas de verificación aparecen como caracteres Unicode, como ✓ (marcada) o ☐ (sin marcar).
Las casillas de verificación completadas tienen el valor filled_checkbox: under pages > x > formFields > x > fieldValue > valueType.
. Las casillas de verificación que no están marcadas tienen el valor unfilled_checkbox
.
Los campos de contenido muestran el valor del contenido de la casilla de verificación como destacado ✓ en la ruta de acceso pages>formFields>x>fieldValue>textAnchor>content
.
Para ayudarte a visualizar la estructura del documento, en las siguientes imágenes se dibujan polígonos de límite para page.formFields
y page.tables
.
Campos del formulario
Tablas
Muestras de código
En los siguientes ejemplos de código, se muestra cómo enviar una solicitud de procesamiento y, luego, leer e imprimir los campos en la terminal:
Java
Para obtener más información, consulta la documentación de referencia de la API de Document AI Java.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener más información, consulta la documentación de referencia de la API de Document AI Node.js.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener más información, consulta la documentación de referencia de la API de Document AI Python.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Entidades, entidades anidadas y valores normalizados
Muchos de los procesadores especializados extraen datos estructurados que se basan en un esquema bien definido. Por ejemplo, el analizador de facturas detecta campos específicos, como invoice_date
y supplier_name
. Esta es una factura de ejemplo:
Este es el objeto de documento completo que muestra el analizador de facturas:
Estas son algunas de las partes importantes del objeto de documento:
Campos detectados:
Entities
contiene los campos que el procesador pudo detectar, por ejemplo,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 } } } ] }
En el caso de ciertos campos, el procesador también normaliza el valor. En este ejemplo, la fecha se normalizó de
2020/01/01
a2020-01-01
.Normalización: En el caso de muchos campos admitidos específicos, el procesador también normaliza el valor y muestra un
entity
. El camponormalizedValue
se agrega al campo extraído sin procesar que se obtiene a través deltextAnchor
de cada entidad. Por lo tanto, normaliza el texto literal y, a menudo, divide el valor de texto en subcampos. Por ejemplo, una fecha como el 1 de septiembre de 2024 se representaría de la siguiente manera:
normalizedValue": {
"text": "2020-09-01",
"dateValue": {
"year": 2024,
"month": 9,
"day": 1
}
En este ejemplo, la fecha se normalizó de 2020/01/01 a 2020-01-01, un formato estandarizado para reducir el procesamiento posterior y permitir la conversión al formato elegido.
Las direcciones también suelen normalizarse, lo que desglosa los elementos de la dirección en campos individuales. Los números se normalizan con un número entero o de punto flotante como normalizedValue
.
- Enriquecimiento: Ciertos procesadores y campos también admiten el enriquecimiento.
Por ejemplo, el
supplier_name
original en el documentoGoogle Singapore
se normalizó enGoogle Asia Pacific, Singapore
según Enterprise Knowledge Graph. También observa que, como el Enterprise Knowledge Graph contiene información sobre Google, Document AI infiere elsupplier_address
, a pesar de que no estaba presente en el documento de ejemplo.
{
"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"
]
}
}
}
]
}
Campos anidados: Para crear un esquema (campos) anidado, primero declara una entidad como superior y, luego, crea entidades secundarias debajo de ella. La respuesta de análisis del elemento superior incluye los campos secundarios en el elemento
properties
del campo superior. En el siguiente ejemplo,line_item
es un campo superior que tiene dos campos secundarios:line_item/description
yline_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" } } ] } ] }
Los siguientes analizadores sí lo siguen:
- Extraer (extractor personalizado)
- Heredado
- Analizador de estados de cuenta
- Analizador de gastos
- Analizador de facturas
- Analizador de PaySlip
- Analizador W2
Muestras de código
En las siguientes muestras de código, se muestra cómo enviar una solicitud de procesamiento y, luego, leer e imprimir los campos de un procesador especializado en la terminal:
Java
Para obtener más información, consulta la documentación de referencia de la API de Document AI Java.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener más información, consulta la documentación de referencia de la API de Document AI Node.js.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener más información, consulta la documentación de referencia de la API de Document AI Python.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Extractor de documentos personalizado
El procesador de extractor de documentos personalizado puede extraer entidades personalizadas de documentos que no tienen un procesador previamente entrenado disponible. Esto se puede lograr entrenando un modelo personalizado o usando modelos de base de IA generativa para extraer entidades nombradas sin ningún entrenamiento. Para obtener más información, consulta Crea un extractor de documentos personalizado en la consola.
- Si entrenas un modelo personalizado, el procesador se puede usar de la misma manera que un procesador de extracción de entidades previamente entrenado.
- Si usas un modelo de base, puedes crear una versión del procesador para extraer entidades específicas para cada solicitud, o bien puedes configurarla por solicitud.
Para obtener información sobre la estructura de salida, consulta Entidades, entidades anidadas y valores normalizados.
Muestras de código
Si usas un modelo personalizado o creaste una versión del procesador con un modelo de base, usa los ejemplos de código de extracción de entidades.
En el siguiente ejemplo de código, se muestra cómo configurar entidades específicas para un extractor de documentos personalizado de modelo de base por solicitud e imprimir las entidades extraídas:
Python
Para obtener más información, consulta la documentación de referencia de la API de Document AI Python.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Resúmenes
El procesador de resúmenes usa modelos de base de IA generativa para resumir el texto extraído de un documento. La longitud y el formato de la respuesta se pueden personalizar de las siguientes maneras:
- Longitud
BRIEF
: Un breve resumen de una o dos oracionesMODERATE
: Un resumen de un párrafoCOMPREHENSIVE
: Es la opción más larga disponible.
- Formato
Puedes crear una versión del procesador para una longitud y un formato específicos, o bien configurarla por solicitud.
El texto resumido aparece en Document.entities.normalizedValue.text
. Puedes encontrar un archivo JSON de salida de muestra completo en Resultado del procesador de muestra.
Para obtener más información, consulta Cómo crear un generador de resúmenes de documentos en la consola.
Muestras de código
En la siguiente muestra de código, se muestra cómo configurar una longitud y un formato específicos en una solicitud de procesamiento y cómo imprimir el texto resumido:
Python
Para obtener más información, consulta la documentación de referencia de la API de Document AI Python.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
División y clasificación
Este es un PDF compuesto de 10 páginas que contiene diferentes tipos de documentos y formularios:
Este es el objeto de documento completo que muestra el divisor y clasificador de documentos de préstamos:
Cada documento que detecta el divisor se representa con un entity
. Por ejemplo:
{
"entities": [
{
"textAnchor": {
"textSegments": [
{
"startIndex": "13936",
"endIndex": "21108"
}
]
},
"type": "1040se_2020",
"confidence": 0.76257163,
"pageAnchor": {
"pageRefs": [
{
"page": "6"
},
{
"page": "7"
}
]
}
}
]
}
Entity.pageAnchor
indica que este documento tiene 2 páginas. Ten en cuenta quepageRefs[].page
se basa en cero y es el índice en el campodocument.pages[]
.Entity.type
especifica que este documento es un formulario 1040 Schedule SE. Para obtener una lista completa de los tipos de documentos que se pueden identificar, consulta Tipos de documentos identificados en la documentación del encargado del tratamiento de datos.
Para obtener más información, consulta Comportamiento de los divisores de documentos.
Muestras de código
Los divisores identifican los límites de las páginas, pero no dividen el documento de entrada por ti. Puedes usar la caja de herramientas de Document AI para dividir físicamente un archivo PDF con los límites de página. En las siguientes muestras de código, se imprimen los rangos de páginas sin dividir el PDF:
Java
Para obtener más información, consulta la documentación de referencia de la API de Document AI Java.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener más información, consulta la documentación de referencia de la API de Document AI Node.js.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener más información, consulta la documentación de referencia de la API de Document AI Python.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Document
procesado.
Python
Para obtener más información, consulta la documentación de referencia de la API de Document AI Python.
Para autenticarte en Document AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Document AI Toolbox
Document AI Toolbox es un SDK para Python que proporciona funciones de utilidad para administrar, manipular y extraer información de la respuesta del documento.
Crea un objeto de documento "unido" a partir de una respuesta de documento procesada de archivos JSON en
Cloud Storage, archivos JSON locales o salida directamente del método process_document()
.
Puede realizar las siguientes acciones:
- Combina los archivos JSON
Document
fragmentados del procesamiento por lotes en un solo documento "unido". - Exporta fragmentos como un
Document
unificado. -
Obtén el resultado de
Document
de las siguientes fuentes: - Accede al texto de
Pages
,Lines
,Paragraphs
,FormFields
yTables
sin controlar la información deLayout
. - Busca un
Pages
que contenga una cadena objetivo o que coincida con una expresión regular. - Busca
FormFields
por nombre. - Busca
Entities
por tipo. - Convierte
Tables
en un DataFrame o CSV de Pandas. - Inserta
Entities
yFormFields
en una tabla de BigQuery. - Divide un archivo PDF según el resultado de un procesador de divisor o clasificador.
- Extrae la imagen
Entities
de los cuadros de límiteDocument
. -
Convierte
Documents
a formatos de uso general y viceversa:- API de Cloud Vision
AnnotateFileResponse
- hOCR
- Formatos de procesamiento de documentos de terceros
- API de Cloud Vision
- Crea lotes de documentos para procesarlos desde una carpeta de Cloud Storage.
Muestras de código
En las siguientes muestras de código, se muestra cómo usar Document AI Toolbox.