Annonce d’extraction de table améliorée avec Amazon Textract

'Improved table extraction announcement with Amazon Textract'

Amazon Textract est un service de machine learning (ML) qui extrait automatiquement du texte, de l’écriture manuscrite et des données de tout document ou image. Amazon Textract dispose d’une fonctionnalité Tables dans l’API AnalyzeDocument qui offre la possibilité d’extraire automatiquement des structures tabulaires à partir de n’importe quel document. Dans ce billet, nous discutons des améliorations apportées à la fonctionnalité Tables et de la manière dont elle facilite l’extraction d’informations dans des structures tabulaires à partir d’une grande variété de documents.

Les structures tabulaires dans des documents tels que des rapports financiers, des bulletins de paie et des fichiers de certificat d’analyse sont souvent formatées de manière à faciliter l’interprétation des informations. Elles incluent également souvent des informations telles que le titre de la table, le pied de page de la table, le titre de la section et les lignes de résumé dans la structure tabulaire pour une meilleure lisibilité et organisation. Pour un document similaire avant cette amélioration, la fonctionnalité Tables dans AnalyzeDocument aurait identifié ces éléments comme des cellules et n’aurait pas extrait les titres et les pieds de page qui sont présents en dehors des limites de la table. Dans de tels cas, une logique de post-traitement personnalisée pour identifier de telles informations ou les extraire séparément de la sortie JSON de l’API était nécessaire. Avec cette annonce d’améliorations de la fonctionnalité Table, l’extraction de divers aspects de données tabulaires devient beaucoup plus simple.

En avril 2023, Amazon Textract a introduit la capacité de détecter automatiquement les titres, les pieds de page, les titres de section et les lignes de résumé présents dans les documents via la fonctionnalité Tables. Dans ce billet, nous discutons de ces améliorations et donnons des exemples pour vous aider à les comprendre et à les utiliser dans vos flux de traitement de documents. Nous expliquons comment utiliser ces améliorations à l’aide d’exemples de code pour utiliser l’API et traiter la réponse avec la bibliothèque Textractor d’Amazon Textract.

Aperçu de la solution

L’image suivante montre que le modèle mis à jour identifie non seulement la table dans le document, mais également tous les en-têtes et pieds de page de table correspondants. Ce document d’exemple de rapport financier contient le titre de la table, le pied de page, le titre de la section et les lignes de résumé.

L’amélioration de la fonctionnalité Tables ajoute la prise en charge de quatre nouveaux éléments dans la réponse de l’API qui vous permet d’extraire chacun de ces éléments de table facilement et ajoute la capacité de distinguer le type de table.

Éléments de table

Amazon Textract peut identifier plusieurs composants d’une table tels que les cellules de table et les cellules fusionnées. Ces composants, appelés objets Block, encapsulent les détails liés au composant, tels que la géométrie de délimitation, les relations et le score de confiance. Un Block représente des éléments reconnus dans un document dans un groupe de pixels proches les uns des autres. Les nouveaux blocs de table suivants ont été introduits dans cette amélioration :

  • Titre de table – Un nouveau type de Block appelé TABLE_TITLE qui vous permet d’identifier le titre d’une table donnée. Les titres peuvent être une ou plusieurs lignes, qui sont généralement au-dessus d’une table ou intégrés en tant que cellule dans la table.
  • Pieds de table – Un nouveau type de Block appelé TABLE_FOOTER qui vous permet d’identifier les pieds de page associés à une table donnée. Les pieds de page peuvent être une ou plusieurs lignes qui sont généralement en dessous de la table ou intégrés en tant que cellule dans la table.
  • Titre de section – Un nouveau type de Block appelé TABLE_SECTION_TITLE qui vous permet d’identifier si la cellule détectée est un titre de section.
  • Cellules de résumé – Un nouveau type de Block appelé TABLE_SUMMARY qui vous permet d’identifier si la cellule est une cellule de résumé, telle qu’une cellule pour les totaux sur un bulletin de paie.

Types de tables

Lorsque Amazon Textract identifie une table dans un document, il extrait tous les détails de la table dans un type de Block de niveau supérieur de type TABLE. Les tables peuvent avoir diverses formes et tailles. Par exemple, les documents contiennent souvent des tables qui peuvent ou non avoir un en-tête de table discernable. Pour aider à distinguer ces types de tables, nous avons ajouté deux nouveaux types d’entités pour un Bloc de table : SEMI_STRUCTURED_TABLE et STRUCTURED_TABLE. Ces types d’entités vous aident à distinguer entre une table structurée et une table semi-structurée.

Les tables structurées sont des tables qui ont des en-têtes de colonnes clairement définis. Mais avec les tables semi-structurées, les données peuvent ne pas suivre une structure stricte. Par exemple, les données peuvent apparaître dans une structure tabulaire qui n’est pas une table avec des en-têtes définis. Les nouveaux types d’entités offrent la flexibilité de choisir quelles tables conserver ou supprimer lors du post-traitement. L’image suivante montre un exemple de STRUCTURED_TABLE et de SEMI_STRUCTURED_TABLE.

Analyse de la sortie de l’API

Dans cette section, nous explorons comment vous pouvez utiliser la bibliothèque Amazon Textract Textractor pour post-traiter la sortie de l’API AnalyzeDocument avec les améliorations de la fonctionnalité Tables. Cela vous permet d’extraire des informations pertinentes des tables.

Textractor est une bibliothèque créée pour fonctionner parfaitement avec les APIs et les utilitaires Amazon Textract pour convertir ensuite les réponses JSON renvoyées par les APIs en objets programmables. Vous pouvez également l’utiliser pour visualiser les entités sur le document et exporter les données sous forme de fichiers de valeurs séparées par des virgules (CSV). Il est destiné à aider les clients d’Amazon Textract à mettre en place leurs pipelines de post-traitement.

Dans nos exemples, nous utilisons la page d’exemple suivante d’un document de dépôt SEC 10-K.

Le code suivant peut être trouvé dans notre référentiel GitHub. Pour traiter ce document, nous utilisons la bibliothèque Textractor et l’importons pour que nous puissions post-traiter les sorties de l’API et visualiser les données :

pip install amazon-textract-textractor

La première étape consiste à appeler Amazon Textract AnalyzeDocument avec la fonctionnalité Tables, indiquée par le paramètre features=[TextractFeatures.TABLES], pour extraire les informations de la table. Notez que cette méthode invoque l’API AnalyzeDocument en temps réel (ou synchrone), qui prend en charge les documents d’une seule page. Toutefois, vous pouvez utiliser l’API asynchrone StartDocumentAnalysis pour traiter des documents de plusieurs pages (jusqu’à 3 000 pages).

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") # charge l'image du document avec Pillow
extractor = Textractor(region_name="us-east-1") # Initialisez le client textractor, modifiez la région si nécessaire
document = extractor.analyze_document(
    file_source=image,
    features=[TextractFeatures.TABLES],
    save_image=True
)

L’objet document contient des métadonnées sur le document qui peuvent être examinées. Remarquez qu’il reconnaît une table dans le document ainsi que d’autres entités dans le document :

Ce document contient les données suivantes :
Pages - 1
Mots - 658
Lignes - 122
Clés-valeurs - 0
Cases à cocher - 0
Tables - 1
Requêtes - 0
Signatures - 0
Documents d'identité - 0
Documents de frais - 0

Maintenant que nous avons la sortie de l’API contenant les informations de la table, nous visualisons les différents éléments de la table en utilisant la structure de réponse discutée précédemment :

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

La bibliothèque Textractor met en évidence les différentes entités dans la table détectée avec un code couleur différent pour chaque élément de la table. Plongeons plus en profondeur dans la façon dont nous pouvons extraire chaque élément. Le code suivant démontre l’extraction du titre de la table :

table_title = table[0].title.text
table_title

'Le tableau suivant résume, par type de sécurité important, notre trésorerie, nos équivalents de trésorerie, notre trésorerie restreinte et nos titres négociables qui sont mesurés à la juste valeur sur une base récurrente et sont catégorisés à l'aide de la hiérarchie de la juste valeur (en millions) :'

De même, nous pouvons utiliser le code suivant pour extraire les pieds de page de la table. Remarquez que table_footers est une liste, ce qui signifie qu’il peut y avoir un ou plusieurs pieds de page associés à la table. Nous pouvons itérer sur cette liste pour voir tous les pieds de page présents, et comme le montre le code suivant, la sortie affiche trois pieds de page :

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

(1) Le gain (perte) non réalisé connexe enregistré dans "Autres produits (charges), nets" était de $(116) millions et $1,0 milliard au T3 2021 et T3 2022, et de $6 millions et $(11,3) milliards pour les neuf mois terminés le 30 septembre 2021 et 2022.

(2) Nous sommes tenus de nantir ou de restreindre autrement une partie de notre trésorerie, de nos équivalents de trésorerie et de nos titres à revenu fixe négociables principalement en tant que garantie pour des biens immobiliers, des montants dus à des vendeurs tiers dans certaines juridictions, de la dette et des lettres de crédit standby et commerciales. Nous classons la trésorerie, les équivalents de trésorerie et les titres à revenu fixe négociables ayant des restrictions d'utilisation de moins de douze mois en tant que "Comptes débiteurs, nets et autres" et de douze mois ou plus en tant que "Autres actifs" non courants dans nos bilans consolidés. Voir "Note 4 - Engagements et litiges".

(3) Notre investissement en capitaux propres dans Rivian avait une juste valeur de 15,6 milliards de dollars et 5,2 milliards de dollars au 31 décembre 2021 et au 30 septembre 2022, respectivement. L'investissement était soumis à des restrictions réglementaires de vente entraînant une décote pour absence de liquidité d'environ 800 millions de dollars au 31 décembre 2021, qui a expiré au T1 2022.

Générer des données pour l’ingestion en aval

La bibliothèque Textractor vous aide également à simplifier l’ingestion de données de tableau dans des systèmes en aval ou d’autres flux de travail. Par exemple, vous pouvez exporter les données de tableau extraites dans un fichier Microsoft Excel lisible par l’homme. Au moment de la rédaction de cet article, c’est le seul format qui prend en charge les tables fusionnées.

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

Nous pouvons également le convertir en un Pandas DataFrame. DataFrame est un choix populaire pour la manipulation, l’analyse et la visualisation de données dans des langages de programmation tels que Python et R.

En Python, DataFrame est une structure de données primaire dans la bibliothèque Pandas. Il est flexible et puissant, et est souvent le premier choix des professionnels de l’analyse de données pour diverses tâches d’analyse de données et d’IA. Le code suivant montre comment convertir les informations de tableau extraites en un DataFrame avec une seule ligne de code :

df=table[0].to_pandas()
df

Enfin, nous pouvons convertir les données de tableau en un fichier CSV. Les fichiers CSV sont souvent utilisés pour ingérer des données dans des bases de données relationnelles ou des entrepôts de données. Voir le code suivant :

table[0].to_csv()

",0,1,2,3,4,5\n0,,"31 décembre 2021",,30 septembre,"2022",\n1,,Valeur équitable totale estimée,Cost ou coût amorti,Gains bruts non réalisés,Pertes brutes non réalisées,Valeur équitable totale estimée\n2,Trésorerie,"$ 10 942","$ 10 720",$ -,$ -,"$ 10 720"\n3,Valeurs mobilières de niveau 1 :,,,,,\n4,Fonds du marché monétaire,"20 312","16 697",-,-,"16 697"\n5,Valeurs mobilières d'actions (1)(3),"1 646",,,,"5 988"\n6,Valeurs mobilières de niveau 2 :,,,,,\n7,Instruments de dette d'État et d'agences étrangères,181 141,-,(2),139\n8,Instruments de dette d'État et d'agences américaines,"4 300","2 301",-,(169),"2 132"\n9,Instruments de dette d'entreprise,"35 764","20 229",-,(799),"19 430"\n10,Instruments de créances adossées à des actifs,"6 738","3 578",-,(191),"3 387"\n11,Autres valeurs mobilières à revenu fixe,686 403,-,(22),381\n12,Valeurs mobilières d'actions (1)(3),"15 740",,,,19\n13,,"$ 96 309","$ 54 069",$ -,"$ (1 183)","$ 58 893"\n14,"Moins : Trésorerie, équivalents de trésorerie et titres de placement restreints (2)",(260),,,,(231)\n15,"Total de la trésorerie, des équivalents de trésorerie et des titres négociables","$ 96 049",,,,"$ 58 662"\n'</p><h2> </h2>

Conclusion

L’introduction de ces nouveaux types de blocs et d’entités (TABLE_TITLE, TABLE_FOOTER, STRUCTURED_TABLE, SEMI_STRUCTURED_TABLE, TABLE_SECTION_TITLE, TABLE_FOOTER et TABLE_SUMMARY) marque une avancée significative dans l’extraction de structures tabulaires à partir de documents avec Amazon Textract.

Ces outils offrent une approche plus nuancée et flexible, répondant aux besoins des tables structurées et semi-structurées et veillant à ce qu’aucune donnée importante ne soit négligée, quel que soit son emplacement dans un document.

Cela signifie que nous pouvons désormais gérer des types de données et des structures de table diversifiés avec une efficacité et une précision améliorées. Alors que nous continuons à adopter la puissance de l’automatisation dans les flux de travail de traitement de documents, ces améliorations ouvriront sans aucun doute la voie à des flux de travail plus rationalisés, une productivité accrue et une analyse de données plus éclairante. Pour plus d’informations sur AnalyzeDocument et la fonctionnalité Tables, reportez-vous à AnalyzeDocument.

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

Share:

Was this article helpful?

93 out of 132 found this helpful

Apprentissage automatique

Apprentissage automatique

Découvrez la puissance de l'apprentissage automatique pour extraire des informations et effectuer des prédictions à partir des données.

    Discover more

    AI

    Évaluation des grands modèles de langage Découvrez AgentSims, un cadre d'intelligence artificielle basé sur les tâches pour des tests complets et objectifs.

    Les LLM ont changé la façon dont le traitement du langage (NLP) est perçu, mais le problème de leur évaluation persis...

    AI

    Google AI présente SANPO Un ensemble de données vidéo multi-attributs pour la compréhension des scènes extérieures humaines égocentriques.

    Pour des tâches telles que la conduite autonome, le modèle d’intelligence artificielle doit comprendre non seul...

    AI

    Au-delà du Buzz Exploration des applications pratiques de l'IA générative dans les industries

    Introduction Le monde d’aujourd’hui tourne autour du terme “IA génératrice”. Les grandes firm...

    AI

    Le scraping de données sous les feux des projecteurs les modèles de langage franchissent-ils les limites en s'entraînant sur le contenu de tout le monde ?

    Alors que je terminais mes recherches pour cet article et m'apprêtais à commencer à écrire, OpenAI a fait une annonce...