Annuncio estrazioni di tabelle migliorate con Amazon Textract

Improved table extraction announced with Amazon Textract.

Amazon Textract è un servizio di machine learning (ML) che estrae automaticamente testo, scrittura a mano e dati da qualsiasi documento o immagine. Amazon Textract ha una funzione Tabelle all’interno dell’API AnalyzeDocument che offre la possibilità di estrarre automaticamente strutture tabulari da qualsiasi documento. In questo post, discutiamo i miglioramenti apportati alla funzione Tabelle e come rende più facile l’estrazione di informazioni in strutture tabulari da una vasta gamma di documenti.

Le strutture tabulari nei documenti come rapporti finanziari, buste paga e file di certificati di analisi sono spesso formattati in modo da consentire una facile interpretazione delle informazioni. Spesso includono anche informazioni come il titolo della tabella, il piè di pagina della tabella, il titolo della sezione e le righe di riepilogo all’interno della struttura tabulare per una migliore leggibilità e organizzazione. Per un documento simile prima di questo miglioramento, la funzione Tabelle all’interno di AnalyzeDocument avrebbe identificato quegli elementi come celle, e non avrebbe estratto i titoli e i piè di pagina che sono presenti al di fuori dei limiti della tabella. In tali casi, era necessaria una logica di post-elaborazione personalizzata per identificare tali informazioni o estrarle separatamente dall’output JSON dell’API. Con questo annuncio di miglioramenti alla funzione Tabelle, l’estrazione di vari aspetti dei dati tabulari diventa molto più semplice.

Ad aprile 2023, Amazon Textract ha introdotto la capacità di rilevare automaticamente i titoli, i piè di pagina, i titoli di sezione e le righe di riepilogo presenti nei documenti tramite la funzione Tabelle. In questo post, discutiamo di questi miglioramenti e forniamo esempi per aiutarti a comprendere e utilizzare tali miglioramenti nei tuoi flussi di elaborazione dei documenti. Scopriamo come utilizzare questi miglioramenti attraverso esempi di codice per utilizzare l’API e processare la risposta con la libreria Textractor di Amazon Textract.

Panoramica della soluzione

La seguente immagine mostra che il modello aggiornato non solo identifica la tabella nel documento ma tutti gli intestazioni e piè di pagina della tabella corrispondenti. Questo campione di rapporto finanziario contiene il titolo della tabella, il piè di pagina, il titolo della sezione e le righe di riepilogo.

Il miglioramento della funzione Tabelle aggiunge il supporto per quattro nuovi elementi nella risposta dell’API che ti consente di estrarre ognuno di questi elementi della tabella con facilità e aggiunge la capacità di distinguere il tipo di tabella.

Elementi della tabella

Amazon Textract può identificare diversi componenti di una tabella come celle della tabella e celle unite. Questi componenti, noti come oggetti Blocco, racchiudono i dettagli relativi al componente, come la geometria di delimitazione, le relazioni e il punteggio di affidabilità. Un Blocco rappresenta gli elementi riconosciuti in un documento all’interno di un gruppo di pixel vicini tra loro. I seguenti sono i nuovi blocchi di tabella introdotti in questo miglioramento:

  • Titolo della tabella – Un nuovo tipo di Blocco chiamato TABLE_TITLE che ti consente di identificare il titolo di una determinata tabella. I titoli possono essere una o più righe, che sono tipicamente sopra una tabella o incorporate come una cella all’interno della tabella.
  • Piè di pagina della tabella – Un nuovo tipo di Blocco chiamato TABLE_FOOTER che ti consente di identificare i piè di pagina associati a una determinata tabella. I piè di pagina possono essere una o più righe che sono tipicamente sotto la tabella o incorporate come una cella all’interno della tabella.
  • Titolo della sezione – Un nuovo tipo di Blocco chiamato TABLE_SECTION_TITLE che ti consente di identificare se la cella rilevata è un titolo di sezione.
  • Celle di riepilogo – Un nuovo tipo di Blocco chiamato TABLE_SUMMARY che ti consente di identificare se la cella è una cella di riepilogo, come una cella per i totali su una busta paga.

Tipi di tabelle

Quando Amazon Textract identifica una tabella in un documento, estrae tutti i dettagli della tabella in un tipo di Blocco di primo livello di tipo TABLE. Le tabelle possono avere forme e dimensioni diverse. Ad esempio, i documenti spesso contengono tabelle che possono o meno avere un’intestazione di tabella discernibile. Per aiutare a distinguere questi tipi di tabelle, abbiamo aggiunto due nuovi tipi di entità per un Blocco TABLE: SEMI_STRUCTURED_TABLE e STRUCTURED_TABLE. Questi tipi di entità ti aiutano a distinguere tra una tabella strutturata e una tabella semistrutturata.

Le tabelle strutturate sono tabelle che hanno intestazioni di colonna chiaramente definite. Ma con le tabelle semi-strutturate, i dati potrebbero non seguire una struttura rigida. Ad esempio, i dati potrebbero apparire in una struttura tabulare che non è una tabella con intestazioni definite. I nuovi tipi di entità offrono la flessibilità di scegliere quali tabelle mantenere o rimuovere durante la post-elaborazione. L’immagine seguente mostra un esempio di STRUCTURED_TABLE e SEMI_STRUCTURED_TABLE.

Analisi dell’output API

In questa sezione, esploreremo come utilizzare la libreria Textractor di Amazon Textract per post-elaborare l’output API di AnalyzeDocument con le funzionalità di miglioramento delle tabelle. Ciò consente di estrarre informazioni rilevanti dalle tabelle.

Textractor è una libreria creata per lavorare in modo impeccabile con Amazon Textract APIs e le utility per convertire successivamente le risposte JSON restituite dalle API in oggetti programmabili. È possibile utilizzarlo anche per visualizzare le entità sul documento ed esportare i dati in formati come file di valori separati da virgola (CSV). È destinato ad aiutare i clienti di Amazon Textract a configurare le loro pipeline di post-elaborazione.

Nelle nostre esempi, utilizziamo la seguente pagina di esempio da un documento di deposito SEC 10-K.

Il seguente codice può essere trovato all’interno del nostro repository GitHub. Per elaborare questo documento, utilizziamo la libreria Textractor e la importiamo per post-elaborare le uscite API e visualizzare i dati:

pip install amazon-textract-textractor

Il primo passo è chiamare Amazon Textract AnalyzeDocument con la funzionalità Tabelle, indicata dal parametro features=[TextractFeatures.TABLES] per estrarre le informazioni sulla tabella. Si noti che questo metodo invoca l’API AnalyzeDocument in tempo reale (o sincrona), che supporta documenti a una sola pagina. Tuttavia, è possibile utilizzare l’API asincrona StartDocumentAnalysis per elaborare documenti multipagina (con fino a 3.000 pagine).

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") # carica l'immagine del documento con Pillow
extractor = Textractor(region_name="us-east-1") # Inizializza il client Textractor, modifica la regione se necessario
document = extractor.analyze_document(
    file_source=image,
    features=[TextractFeatures.TABLES],
    save_image=True
)

L’oggetto documento contiene metadati sul documento che possono essere esaminati. Si noti che riconosce una tabella nel documento insieme ad altre entità nel documento:

Questo documento contiene i seguenti dati:
Pagine - 1
Parole - 658
Linee - 122
Chiavi-valori - 0
Caselle di controllo - 0
Tabelle - 1
Query - 0
Firme - 0
Documenti di identità - 0
Documenti di spesa - 0

Ora che abbiamo l’output API contenente le informazioni sulla tabella, visualizziamo gli elementi diversi della tabella utilizzando la struttura di risposta discussa in precedenza:

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

La libreria Textractor evidenzia le varie entità all’interno della tabella rilevata con un codice colore diverso per ogni elemento della tabella. Approfondiamo come possiamo estrarre ogni elemento. Il seguente snippet di codice mostra come estrarre il titolo della tabella:

table_title = table[0].title.text
table_title

'La seguente tabella riassume, per il tipo di sicurezza principale, il nostro denaro, i nostri equivalenti di denaro, il denaro vincolato e i titoli di stato che sono valutati al valore equo su base ricorrente e sono categorizzati utilizzando la gerarchia del valore equo (in milioni):'

Allo stesso modo, possiamo utilizzare il seguente codice per estrarre i piè di pagina della tabella. Si noti che table_footers è una lista, il che significa che può esserci uno o più piè di pagina associati alla tabella. Possiamo iterare su questa lista per vedere tutti i piè di pagina presenti e, come mostrato nel seguente frammento di codice, l’output visualizza tre piè di pagina:

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

(1) Il guadagno (perdita) non realizzato correlato registrato in "Altri redditi (spese), netti" era di $(116) milioni e $1,0 miliardi nel T3 2021 e T3 2022, e di $6 milioni e $(11,3) miliardi per i nove mesi terminati il 30 settembre 2021 e 2022.

(2) Siamo tenuti a impegnare o altrimenti vincolare una parte dei nostri contanti, equivalenti di conto e titoli a reddito fisso negoziabili principalmente come garanzia per immobili, importi dovuti a venditori terzi in determinate giurisdizioni, debiti e lettere di credito standby e commerciali. Classifichiamo i contanti, gli equivalenti di conto e i titoli a reddito fisso negoziabili con restrizioni d'uso inferiori a dodici mesi come "Crediti commerciali, netti e altri" e di dodici mesi o più come "Altri attivi non correnti" nei nostri bilanci consolidati. Vedi "Nota 4 - Impegni e Contingenze".

(3) Il nostro investimento in equity in Rivian aveva un valore equo di $15,6 miliardi e $5,2 miliardi al 31 dicembre 2021 e al 30 settembre 2022, rispettivamente. L'investimento era soggetto a restrizioni normative sulla vendita che hanno comportato uno sconto per la mancanza di liquidità di circa $800 milioni al 31 dicembre 2021, scaduto nel Q1 2022.

Generazione di dati per l’ingestione a valle

La libreria Textractor ti aiuta anche a semplificare l’ingestione dei dati della tabella in sistemi a valle o in altri flussi di lavoro. Ad esempio, puoi esportare i dati della tabella estratti in un file di Microsoft Excel leggibile dall’utente. Al momento della stesura di questo testo, questo è l’unico formato che supporta le tabelle unite.

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

Possiamo anche convertirlo in un DataFrame di Pandas. DataFrame è una scelta popolare per la manipolazione, l’analisi e la visualizzazione dei dati nei linguaggi di programmazione come Python e R.

In Python, DataFrame è una struttura dati primaria nella libreria Pandas. È flessibile e potente ed è spesso la prima scelta per i professionisti dell’analisi dei dati per vari compiti di analisi dei dati e ML. Il seguente frammento di codice mostra come convertire le informazioni della tabella estratta in un DataFrame con una sola riga di codice:

df=table[0].to_pandas()
df

Infine, possiamo convertire i dati della tabella in un file CSV. I file CSV sono spesso utilizzati per l’ingestione di dati in database relazionali o data warehouse. Vedere il seguente codice:

table[0].to_csv()

',0,1,2,3,4,5\n0,,"31 dicembre 2021",,30 settembre,"2022",\n1,,Valore equo stimato totale,Costo o costo ammortizzato,Plusvalenza lorda,Minusvalenza lorda,Valore equo stimato totale\n2,Contanti,"$ 10.942","$ 10.720",$ -,$ -,"$ 10.720"\n3,Titoli di livello 1:,,,,,\n4,Fondi del mercato monetario,"20.312","16.697",-,-,"16.697"\n5,Titoli azionari (1)(3),"1.646",,,,"5.988"\n6,Titoli di livello 2:,,,,,\n7,Titoli di Stato e di enti esteri,181.141,-,(2),139\n8,Titoli di Stato e di enti statunitensi,"4.300","2.301",-,(169),"2.132"\n9,Obbligazioni societarie,"35.764","20.229",-,(799),"19.430"\n10,Asset-backed securities,"6.738","3.578",-,(191),"3.387"\n11,Altri titoli a reddito fisso,686.403,-,(22),381\n12,Titoli azionari (1)(3),"15.740",,,,19\n13,,"$ 96.309","$ 54.069",$ -,"$ (1.183)","$ 58.893"\n14,"Meno: Contanti, equivalenti di conto e titoli a reddito fisso vincolati (2)",(260),,,,(231)\n15,"Totale contanti, equivalenti di conto e titoli a reddito fisso negoziabili","$ 96.049",,,,"$ 58.662"\n'</p><h2> </h2>

Conclusione

L’introduzione di questi nuovi tipi di blocchi ed entità (TABLE_TITLE, TABLE_FOOTER, STRUCTURED_TABLE, SEMI_STRUCTURED_TABLE, TABLE_SECTION_TITLE, TABLE_FOOTER e TABLE_SUMMARY) rappresenta un significativo avanzamento nell’estrazione di strutture tabellari dai documenti con Amazon Textract.

Questi strumenti forniscono un approccio più sfumato e flessibile, adattabile sia alle tabelle strutturate che semistrutturate e assicurando che nessun dato importante venga trascurato, indipendentemente dalla sua posizione in un documento.

Ciò significa che ora siamo in grado di gestire diversi tipi di dati e strutture di tabelle con maggiore efficienza e precisione. Continuando ad abbracciare il potere dell’automazione nei flussi di lavoro di elaborazione dei documenti, questi miglioramenti apriranno senza dubbio la strada a flussi di lavoro più snelli, maggiore produttività e analisi dati più insightful. Per maggiori informazioni su AnalyzeDocument e la funzionalità Tabelle, consultare AnalyzeDocument.