Anunciando mejoras en la extracción de tablas con Amazon Textract

Improved table extraction with Amazon Textract announced.

Amazon Textract es un servicio de aprendizaje automático (ML) que extrae automáticamente texto, escritura a mano y datos de cualquier documento o imagen. Amazon Textract tiene una función de Tablas dentro de la API AnalyzeDocument que ofrece la capacidad de extraer automáticamente estructuras tabulares de cualquier documento. En esta publicación, discutimos las mejoras realizadas en la función de Tablas y cómo facilita la extracción de información en estructuras tabulares de una amplia variedad de documentos.

Estructuras tabulares en documentos como informes financieros, talones de pago y archivos de certificados de análisis a menudo se formatean de una manera que permite una fácil interpretación de la información. A menudo también incluyen información como el título de la tabla, el pie de tabla, el título de sección y las filas de resumen dentro de la estructura tabular para una mejor legibilidad y organización. Para un documento similar antes de esta mejora, la función de Tablas dentro de AnalyzeDocument habría identificado esos elementos como celdas, y no habría extraído títulos y pies de tabla que estén presentes fuera de los límites de la tabla. En tales casos, era necesario un procesamiento posterior personalizado para identificar tal información o extraerla por separado de la salida JSON de la API. Con este anuncio de mejoras en la función de Tablas, la extracción de varios aspectos de datos tabulares se simplifica mucho.

En abril de 2023, Amazon Textract introdujo la capacidad de detectar automáticamente títulos, pies de tabla, títulos de sección y filas de resumen presentes en documentos a través de la función de Tablas. En esta publicación, discutimos estas mejoras y damos ejemplos para ayudarlo a comprender y usarlos en sus flujos de trabajo de procesamiento de documentos. Detallamos cómo utilizar estas mejoras a través de ejemplos de código para usar la API y procesar la respuesta con la biblioteca Textractor de Amazon Textract.

Descripción general de la solución

La siguiente imagen muestra que el modelo actualizado no solo identifica la tabla en el documento, sino también todos los encabezados y pies de tabla correspondientes. Este documento de muestra de informe financiero contiene título de tabla, pie de tabla, título de sección y filas de resumen.

La mejora de la función de Tablas agrega soporte para cuatro nuevos elementos en la respuesta de la API que le permite extraer cada uno de estos elementos de la tabla con facilidad, y agrega la capacidad de distinguir el tipo de tabla.

Elementos de tabla

Amazon Textract puede identificar varios componentes de una tabla, como celdas de tabla y celdas combinadas. Estos componentes, conocidos como objetos Bloque, encapsulan los detalles relacionados con el componente, como la geometría de límites, las relaciones y la puntuación de confianza. Un Bloque representa elementos que se reconocen en un documento dentro de un grupo de píxeles cercanos entre sí. Los siguientes son los nuevos Bloques de Tabla introducidos en esta mejora:

  • Título de tabla – Un nuevo tipo de Bloque llamado TABLE_TITLE que le permite identificar el título de una tabla determinada. Los títulos pueden ser una o más líneas, que suelen estar por encima de una tabla o incrustados como una celda dentro de la tabla.
  • Pie de tabla – Un nuevo tipo de Bloque llamado TABLE_FOOTER que le permite identificar los pies asociados con una tabla determinada. Los pies pueden ser una o varias líneas que suelen estar debajo de la tabla o incrustados como una celda dentro de la tabla.
  • Título de sección – Un nuevo tipo de Bloque llamado TABLE_SECTION_TITLE que le permite identificar si la celda detectada es un título de sección.
  • Celdas de resumen – Un nuevo tipo de Bloque llamado TABLE_SUMMARY que le permite identificar si la celda es una celda de resumen, como una celda para totales en un talón de pago.

Tipos de tablas

Cuando Amazon Textract identifica una tabla en un documento, extrae todos los detalles de la tabla en un tipo de Bloque de nivel superior de TABLE. Las tablas pueden tener diversas formas y tamaños. Por ejemplo, los documentos a menudo contienen tablas que pueden o no tener un encabezado de tabla discernible. Para ayudar a distinguir estos tipos de tablas, agregamos dos nuevos tipos de entidad para un Bloque de Tabla: SEMI_STRUCTURED_TABLE y STRUCTURED_TABLE. Estos tipos de entidad le ayudan a distinguir entre una tabla estructurada y una tabla semiestructurada.

Las tablas estructuradas son aquellas que tienen encabezados de columna claramente definidos. Pero con las tablas semi-estructuradas, los datos pueden no seguir una estructura estricta. Por ejemplo, los datos pueden aparecer en una estructura tabular que no es una tabla con encabezados definidos. Los nuevos tipos de entidad ofrecen la flexibilidad de elegir qué tablas mantener o eliminar durante el postprocesamiento. La siguiente imagen muestra un ejemplo de STRUCTURED_TABLE y SEMI_STRUCTURED_TABLE.

Analizando la salida de la API

En esta sección, exploramos cómo puede utilizar la biblioteca Textractor de Amazon Textract para postprocesar la salida de la API de AnalyzeDocument con las mejoras de la función de tablas. Esto le permite extraer información relevante de las tablas.

Textractor es una biblioteca creada para trabajar perfectamente con las API y utilidades de Amazon Textract para posteriormente convertir las respuestas JSON devueltas por las API en objetos programables. También puede utilizarlo para visualizar entidades en el documento y exportar los datos en formatos como archivos de valores separados por comas (CSV). Está destinado a ayudar a los clientes de Amazon Textract en la configuración de sus canalizaciones de postprocesamiento.

En nuestros ejemplos, utilizamos la siguiente página de ejemplo de un documento de presentación 10-K de la SEC.

El siguiente código se puede encontrar dentro de nuestro repositorio de GitHub. Para procesar este documento, utilizamos la biblioteca Textractor y la importamos para que podamos postprocesar las salidas de la API y visualizar los datos:

pip install amazon-textract-textractor

El primer paso es llamar a Amazon Textract AnalyzeDocument con la función de tablas, indicado por el parámetro features=[TextractFeatures.TABLES] para extraer la información de la tabla. Tenga en cuenta que este método invoca la API de análisis de documentos en tiempo real (o sincrónica), que admite documentos de una sola página. Sin embargo, puede utilizar la API StartDocumentAnalysis asincrónica para procesar documentos con varias páginas (hasta 3.000 páginas).

from PIL import Image
from textractor import Textractor
from textractor.visualizers.entitylist import EntityList
from textractor.data.constants import TextractFeatures, Direction, DirectionalFinderType
image = Image.open("sec_filing.png") # carga la imagen del documento con Pillow
extractor = Textractor(region_name="us-east-1") # Inicializar el cliente Textractor, modificar la región si es necesario
document = extractor.analyze_document(
    file_source=image,
    features=[TextractFeatures.TABLES],
    save_image=True
)

El objeto document contiene metadatos sobre el documento que se pueden revisar. Observe que reconoce una tabla en el documento junto con otras entidades en el documento:

Este documento contiene los siguientes datos:
Páginas - 1
Palabras - 658
Líneas - 122
Clave-valores - 0
Casillas de verificación - 0
Tablas - 1
Consultas - 0
Firmas - 0
Documentos de identidad - 0
Documentos de gastos - 0

Ahora que tenemos la salida de la API que contiene la información de la tabla, visualizamos los diferentes elementos de la tabla utilizando la estructura de respuesta discutida anteriormente:

table = EntityList(document.tables[0])
document.tables[0].visualize()

La biblioteca Textractor resalta las diferentes entidades dentro de la tabla detectada con un código de color diferente para cada elemento de la tabla. Profundicemos en cómo podemos extraer cada elemento. El siguiente fragmento de código demuestra cómo extraer el título de la tabla:

título_de_la_tabla = table[0].title.text
título_de_la_tabla

'La siguiente tabla resume, por tipo de seguridad principal, nuestro efectivo, equivalentes de efectivo, efectivo restringido y valores negociables que se miden al valor razonable de forma recurrente y se categorizan utilizando la jerarquía de valor razonable (en millones):'

De manera similar, podemos usar el siguiente código para extraer los pies de página de la tabla. Observe que table_footers es una lista, lo que significa que puede haber uno o más pies de página asociados con la tabla. Podemos iterar sobre esta lista para ver todos los pies de página presentes, y como se muestra en el siguiente fragmento de código, la salida muestra tres pies de página:

table_footers = table[0].footers
for footers in table_footers:
    print (footers.text)

(1) La ganancia (pérdida) no realizada relacionada registrada en "Otros ingresos (gastos), neto" fue de $(116) millones y $ 1.0 mil millones en el tercer trimestre de 2021 y 2022, y $ 6 millones y $(11.3) mil millones para los nueve meses finalizados el 30 de septiembre de 2021 y 2022.

(2) Estamos obligados a garantizar o restringir de otra manera una porción de nuestro efectivo, equivalentes de efectivo y valores fijos negociables principalmente como garantía para bienes inmuebles, cantidades adeudadas a vendedores de terceros en ciertas jurisdicciones, deuda y cartas de crédito comerciales y de standby. Clasificamos el efectivo, los equivalentes de efectivo y los valores fijos negociables con restricciones de uso de menos de doce meses como "Cuentas por cobrar, netas y otros" y de doce meses o más como "Otros activos" no corrientes en nuestros estados financieros consolidados. Consulte "Nota 4 - Compromisos y contingencias".

(3) Nuestra inversión patrimonial en Rivian tuvo un valor justo de $ 15.6 mil millones y $ 5.2 mil millones al 31 de diciembre de 2021 y al 30 de septiembre de 2022, respectivamente. La inversión estaba sujeta a restricciones regulatorias de venta que resultaron en un descuento por falta de comercialización de aproximadamente $ 800 millones al 31 de diciembre de 2021, que expiró en el primer trimestre de 2022.

Generando datos para la ingestión posterior

La biblioteca Textractor también le ayuda a simplificar la ingestión de datos de tabla en sistemas de downstream u otros flujos de trabajo. Por ejemplo, puede exportar los datos de tabla extraídos en un archivo de Microsoft Excel legible por humanos. En el momento de escribir esto, este es el único formato que admite tablas combinadas.

table[0].to_excel(filepath="sec_filing.xlsx")

También podemos convertirlo en un Pandas DataFrame. DataFrame es una opción popular para la manipulación, el análisis y la visualización de datos en lenguajes de programación como Python y R.

En Python, DataFrame es una estructura de datos primaria en la biblioteca Pandas. Es flexible y poderoso, y a menudo es la primera opción para los profesionales de análisis de datos para diversas tareas de análisis de datos y ML. El siguiente fragmento de código muestra cómo convertir la información de tabla extraída en un DataFrame con una sola línea de código:

df=table[0].to_pandas()
df

Por último, podemos convertir los datos de tabla en un archivo CSV. Los archivos CSV se utilizan a menudo para la ingestión de datos en bases de datos relacionales o almacenes de datos. Vea el siguiente código:

table[0].to_csv()

',0,1,2,3,4,5\n0,,"31 de diciembre de 2021",,30 de septiembre,"2022",\n1,,Valor justo estimado total, Costo o costo amortizado, Ganancias brutas no realizadas, Pérdidas brutas no realizadas, Valor justo estimado total\n2,Efectivo,"$ 10,942","$ 10,720",$ -,$ -,"$ 10,720"\n3,Valores negociables de nivel 1:,,,,,\n4,Fondos del mercado monetario,"20,312","16,697",-,-,"16,697"\n5,Valores negociables de renta variable (1)(3),"1,646",,,,"5,988"\n6,Valores negociables de nivel 2:,,,,,\n7,Valores gubernamentales y de agencias extranjeras,181,141,-,(2),139\n8,Valores gubernamentales y de agencias de EE. UU.,"4,300","2,301",-,(169),"2,132"\n9,Valores de deuda corporativa,"35,764","20,229",-,(799),"19,430"\n10,Valores respaldados por activos,"6,738","3,578",-,(191),"3,387"\n11,Otros valores fijos negociables,686,403,-,(22),381\n12,Valores negociables de renta variable (1)(3),"15,740",,,,19\n13,,"$ 96,309","$ 54,069",$ -,"$ (1,183)","$ 58,893"\n14,"Menos: Efectivo restringido, equivalentes de efectivo y valores negociables (2)",(260),,,,(231)\n15,"Total de efectivo, equivalentes de efectivo y valores negociables","$ 96,049",,,,"$ 58,662"\n'</p><h2> </h2>

Conclusión

La introducción de estos nuevos tipos de bloques y entidades (TITLE_TABLE, TABLE_FOOTER, STRUCTURED_TABLE, SEMI_STRUCTURED_TABLE, TITLE_SECTION_TABLE, TABLE_FOOTER y TABLE_SUMMARY) marca un avance significativo en la extracción de estructuras tabulares de documentos con Amazon Textract.

Estas herramientas proporcionan un enfoque más detallado y flexible, que atiende tanto a tablas estructuradas como semiestructuradas, asegurando que no se pasen por alto datos importantes, independientemente de su ubicación en un documento.

Esto significa que ahora podemos manejar diversos tipos de datos y estructuras de tablas con eficiencia y precisión mejoradas. A medida que continuamos aprovechando el poder de la automatización en los flujos de trabajo de procesamiento de documentos, estas mejoras sin duda allanarán el camino para flujos de trabajo más eficientes, una mayor productividad y un análisis de datos más esclarecedor. Para obtener más información sobre AnalyzeDocument y la función de tablas, consulte AnalyzeDocument.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Conoce a los 'Super Usuarios' de la IA Generativa el 70% de la Generación Z utiliza GenAI

La encuesta de Salesforce muestra que la edad y el estado laboral son factores importantes en la adopción de la IA.

Inteligencia Artificial

Investigadores de UC Berkeley presentan Nerfstudio un marco de trabajo en Python para el desarrollo de Neural Radiance Field (NeRF)

¿Quién no es fan de Iron Man? Se ve realmente genial cuando está trabajando en su laboratorio. Todos los hologramas y...

Inteligencia Artificial

Haciendo la vida más amigable con robots personales

Sharifa Alghowinem, una científica investigadora del Media Lab, explora la tecnología de robots personales que explic...

Inteligencia Artificial

¿Y si pudiéramos explicar fácilmente modelos excesivamente complejos?

Este artículo se basa en el siguiente artículo https//www.sciencedirect.com/science/article/abs/pii/S0377221723006598...