Comprendere le tabelle
Applica l'arricchimento Table Understanding per ottenere informazioni dettagliate sulle tabelle e i dati correlati alla tabella all'interno dei documenti.
Le seguenti attività generano un campo HTML con le informazioni sulla tabella e applicano automaticamente l'arricchimento Table Understanding per la tua raccolta:
-
Se utilizzi lo strumento Smart Document Understanding per definire un modello SDU addestrato dall'utente o preaddestrato, l'arricchimento
Table Understandingviene applicato al campohtmlgenerato per la raccolta. -
Se si crea un tipo di progetto Document Retrieval for Contracts, un modello SDU preaddestrato viene applicato automaticamente alla raccolta. Di conseguenza, l'arricchimento
Table Understandingviene applicato al campohtmlgenerato per la raccolta.Per ulteriori informazioni, consultare Smart Document Understanding.
Prima di iniziare
I documenti nella raccolta devono contenere un campo con rappresentazioni HTML delle proprie tabelle. Queste informazioni vengono spesso memorizzate nel campo html. Se la tua raccolta è composta da file CSV o JSON, potrebbe avere
un campo diverso dal campo html che contiene le informazioni della tabella in formato HTML.
Applicazione dell'arricchimento table understanding
È possibile applicare l'arricchimento solo a un campo contenente una rappresentazione HTML della tabella.
Per applicare l'arricchimento, completa la seguente procedura:
-
Dal riquadro di navigazione, aprire la pagina Gestisci raccolte e fare clic su una raccolta per aprirla.
-
Fai clic sulla scheda Enrichments.
-
Trova l'arricchimento Table Understanding.
-
Selezionare il campo
htmldall'elenco dei campi.Scegliere il campo contenente le rappresentazioni HTML delle tabelle.
Una volta applicato l'arricchimento, puoi ottenere risultati validi quando inoltri le query che richiedono Discovery per trovare le informazioni memorizzate nelle tabelle.
Uno sviluppatore può interrogare le tabelle utilizzando l'API. Per ulteriori informazioni, vedi Parametri di query.
Per ulteriori informazioni su come applicare l'arricchimento della tabella utilizzando l'API, consulta Applicazione degli arricchimenti utilizzando l'API.
Utilizzo dei dati tabulari in Python
Utilizza Text Extensions for Pandas, una libreria open source di IBM, per leggere le tabelle analizzate dai documenti in Discovery negli oggetti DataFrame pandas. Un pandas DataFrame è un oggetto che rappresenta dati tabulari bidimensionali in un modulo che può essere trasformato e manipolato per l'analisi downstream in Python.
Ad esempio, è possibile estrarre il contenuto dalle tabelle in molti documenti di report annuali e ricostruirlo in una singola tabella che include i punti di interesse dei dati pluriennali. Per ulteriori informazioni, leggi il post del blog Structured Information Extraction from Tables in PDF Documents with Pandas e IBM Watson su Medium.com.
Schema di output
Lo schema di output dall'arricchimento Table Understanding è il seguente.
{
"tables": [
{
"location" : {
"begin" : int,
"end" : int
},
"text": string,
"section_title": {
"text": string,
"location": {
"begin" : int,
"end" : int
}
},
"title": {
"location": {
"begin": int,
"end": int,
},
"text": string
},
"table_headers" : [
{
"cell_id" : string,
"location" : {
"begin" : int,
"end" : int
},
"text" : string,
"row_index_begin" : int,
"row_index_end" : int,
"column_index_begin" : int,
"column_index_end" : int
},
...
],
"column_headers" : [
{
"cell_id" : string,
"location" : {
"begin" : int,
"end" : int
},
"text" : string,
"text_normalized" : string,
"row_index_begin" : int,
"row_index_end" : int,
"column_index_begin" : int,
"column_index_end" : int
},
...
],
"row_headers" : [
{
"cell_id" : string,
"location" : {
"begin" : int,
"end" : int
},
"text" : string,
"text_normalized" : string,
"row_index_begin" : int,
"row_index_end" : int,
"column_index_begin" : int,
"column_index_end" : int
},
...
],
"body_cells" : [
{
"cell_id" : string,
"location" : {
"begin" : int,
"end" : int
},
"text" : string,
"row_index_begin" : int,
"row_index_end" : int,
"column_index_begin" : int,
"column_index_end" : int,
"row_header_ids": [ string ],
"row_header_texts": [ string ],
"row_header_texts_normalized": [ string ],
"column_header_ids": [ string ],
"column_header_texts": [ string ],
"column_header_texts_normalized": [ string ],
"attributes" : [
{
"type" : string,
"text" : string,
"location" : {
"begin" : int,
"end" : int
}
},
...
]
},
...
],
"key_value_pairs": [
{
"key": {
"cell_id": string,
"location": {
"begin": int,
"end": int
},
"text": string
},
"value": [{
"cell_id": string,
"location": {
"begin": int,
"end": int
},
"text": string
},
...
]
},
...
],
"contexts": [
{
"text": string,
"location": {
"begin": int,
"end": int
}
},
...
]
}
]
}
Disposizione dello schema
Lo schema è disposto nel seguente modo:
-
tables: Un array che definisce le tabelle identificate nel documento di input.-
location: l'ubicazione della tabella corrente come definita dai relativi indicibegineendnel documento di input. -
text: il contenuto testuale della tabella corrente dal documento di input senza il contenuto di markup associato. -
section_title: se identificata, l'ubicazione di un titolo di sezione contenuto nella tabella corrente. Vuota se non è identificato alcun titolo di sezione.text: il testo del titolo di sezione identificato.location: l'ubicazione del titolo di sezione nel documento di input come definita dai relativi indicibegineend.
-
title: Se identificato, il titolo o la didascalia della tabella corrente del moduloTable x.: .... Vuoto se non viene identificato alcun titolo. Quando è presente,titleè escluso dalla matricecontextsdella stessa tabella.location: l'ubicazione del titolo nel documento di input come definita dai relativi indicibegineend.text: il testo del titolo o della didascalia della tabella identificati.
-
table_headers: un array di celle di livello tabella applicabili come intestazioni a tutte le altre celle della tabella corrente. Ogni intestazione di tabella è definita come una raccolta di quanto segue::cell_id: ID univoco della cella nella tabella corrente.location: l'ubicazione della cella nel documento di input come definita dai relativi indicibegineend.text: il contenuto testuale della cella dal documento di input senza il contenuto di markup associato.row_index_begin: l'indicebegindell'ubicazionerowdella cella nella tabella corrente.row_index_end: l'indiceenddell'ubicazionerowdella cella nella tabella corrente.column_index_begin: l'indicebegindell'ubicazionecolumndella cella nella tabella corrente.column_index_end: l'indiceenddell'ubicazionecolumndella cella nella tabella corrente.
-
column_headers: un array di celle di livello colonna, ciascuna applicabile come un'intestazione ad altre celle nella stessa colonna come se stessa, della tabella corrente. Ogni intestazione di colonna è definita come una raccolta dei seguenti elementi:cell_id: ID univoco della cella nella tabella corrente.location: l'ubicazione della cella nel documento di input come definita dai relativi indicibegineend.text: il contenuto testuale della cella dal documento di input senza il contenuto di markup associato.text_normalized: testo intestazione colonna normalizzato.row_index_begin: l'indicebegindell'ubicazionerowdella cella nella tabella corrente.row_index_end: l'indiceenddell'ubicazionerowdella cella nella tabella corrente.column_index_begin: l'indicebegindell'ubicazionecolumndella cella nella tabella corrente.column_index_end: l'indiceenddell'ubicazionecolumndella cella nella tabella corrente.
-
row_headers: un array di celle di livello riga, ciascuna applicabile come un'intestazione ad altre celle nella stessa riga come se stessa, della tabella corrente. Ogni intestazione di riga è definita come una raccolta dei seguenti elementi:cell_id: ID univoco della cella nella tabella corrente.location: l'ubicazione della cella nel documento di input come definita dai relativi indicibegineend.text: il contenuto testuale della cella dal documento di input senza il contenuto di markup associato.text_normalized: testo intestazione riga normalizzato.row_index_begin: l'indicebegindell'ubicazionerowdella cella nella tabella corrente.row_index_end: l'indiceenddell'ubicazionerowdella cella nella tabella corrente.column_index_begin: l'indicebegindell'ubicazionecolumndella cella nella tabella corrente.column_index_end: l'indiceenddell'ubicazionecolumndella cella nella tabella corrente.
-
body_cells: un array di celle che non sono celle di intestazione di tabella, colonna o riga, della tabella corrente con le associazioni di intestazione di colonna e riga corrispondenti. Ogni cella del corpo viene definita come una raccolta dei seguenti elementi:-
cell_id: ID univoco della cella nella tabella corrente. -
location: l'ubicazione della cella nel documento di input come definita dai relativi indicibegineend. -
text: il contenuto testuale della cella dal documento di input senza il contenuto di markup associato. -
row_index_begin: l'indicebegindell'ubicazionerowdi questa cella nella tabella corrente. -
row_index_end: l'indiceenddell'ubicazionerowdi questa cella nella tabella corrente. -
column_index_begin: l'indicebegindell'ubicazionecolumndi questa cella nella tabella corrente. -
column_index_end: l'indiceenddell'ubicazionecolumndi questa cella nella tabella corrente. -
row_header_ids: Una matrice di valori, in cui ogni valore è il valore dell'ID cella di un'intestazione di riga associata a questa cella del corpo. -
row_header_texts: un array di valori, dove ogni valore è il testo da un'intestazione di riga per questa cella del corpo. -
row_header_texts_normalized: un array di valori, dove ogni valore è il testo normalizzato da un'intestazione di riga per questa cella del corpo. -
column_header_ids: Una matrice di valori, dove ogni valore è il valore dell'ID della cella di un'intestazione di colonna associata a questa cella del corpo. -
column_header_texts: un array di valori, dove ogni valore è il testo da un'intestazione di colonna per questa cella del corpo. -
column_header_texts_normalized: un array di valori, dove ogni valore è il testo normalizzato da un'intestazione di colonna per questa cella del corpo. -
attributes: un array che identifica gli attributi del documento. Ogni oggetto nell'array è composto da tre elementi:type: il tipo di attributo. I valori possibili sonoAddress,Currency,DateTime,Duration,Location,Number,Organization,PercentageePerson.text: il testo associato all'attributo.location: l'ubicazione dell'attributo come definita dai relativi indicibegineend.
-
-
key_value_pairs: un array che specifica tutte le coppie chiave-valore nelle tabelle nel documento di input. Per ulteriori informazioni, vedi Descrizione delle coppie chiave-valore.-
key: un oggetto che specifica una chiave per una coppia chiave-valore.cell_id: : l'ID univoco della chiave nella tabella.location: l'ubicazione della cella della chiave nel documento di input come definita dai relativi indicibegineend.text: il contenuto di testo della cella tabella senza markup HTML.
-
value: un array che specifica il valore o i valori di una coppia chiave-valore.cell_id: l'ID univoco del valore nella tabella.location: l'ubicazione della cella del valore nel documento di input come definita dai relativi indicibegineend.text: il contenuto di testo della cella tabella senza markup HTML.
-
-
contexts: un elenco di materiale correlato che precede e segue la tabella, escluso il titolo della sezione, che viene fornito nel camposection_title. Il materiale correlato include le frasi correlate, le note a piè di pagina e le frasi da altre parti del documento che fanno riferimento alla tabella. L'elenco è rappresentato come un array. Ogni oggetto nell'array è costituito dai seguenti elementi:text: il contenuto di testo del materiale correlato dal documento di input, senza markup HTML.location: l'ubicazione del materiale correlato nel documento di input come definita dai relativi indicibegineend.
-
Note sullo schema di output della tabella
- I valori di indice riga e colonna per ogni cella sono basati su zero e quindi iniziano con
0. - Più valori negli array di elementi
row_header_idserow_header_textsindicano una possibile gerarchia di intestazioni di riga. - Più valori negli array di elementi
column_header_idsecolumn_header_textsindicano una possibile gerarchia di intestazioni di colonna.
Esempi
La tabella seguente è un esempio di tabella di un documento di input.
La tabella è composta come segue:
La seguente sintassi viene utilizzata nella tabella:
- Il testo in grassetto indica un'intestazione della colonna
- Il testo in corsivo indica un'intestazione di riga
- Il testo senza stile indica una cella del corpo
L'output del servizio rappresenta la prima cella del corpo dell'esempio (cioè la prima cella della riga 3 con il valore 35.0% ) come segue:
{
"tables": [ {
"location": {
"begin": 872,
"end": 5879
},
"text": "...",
"section_title": {
"text": "",
"location": {
"begin": 0,
"end": 0
}
},
"table_headers" : [ ],
"column_headers" : [ {
"cell_id" : "colHeader-1050-1082",
"location" : {
"begin" : 1050,
"end" : 1083
},
"text" : "Three months ended September 30,",
"text_normalized" : "Three months ended September 30,",
"row_index_begin" : 0,
"row_index_end" : 0,
"column_index_begin" : 1,
"column_index_end" : 2
}, {
"cell_id" : "colHeader-1270-1301",
"location" : {
"begin" : 1270,
"end" : 1302
},
"text" : "Nine months ended September 30,",
"text_normalized" : "Nine months ended September 30,",
"row_index_begin" : 0,
"row_index_end" : 0,
"column_index_begin" : 3,
"column_index_end" : 4
}, {
"cell_id" : "colHeader-1544-1548",
"location" : {
"begin" : 1544,
"end" : 1549
},
"text" : "2005",
"text_normalized" : "Year 1",
"row_index_begin" : 1,
"row_index_end" : 1,
"column_index_begin" : 1,
"column_index_end" : 1
}, {
"cell_id" : "colHeader-1712-1716",
"location" : {
"begin" : 1712,
"end" : 1717
},
"text" : "2004",
"text_normalized" : "Year 2",
"row_index_begin" : 1,
"row_index_end" : 1,
"column_index_begin" : 2,
"column_index_end" : 2
}, {
"cell_id" : "colHeader-1889-1893",
"location" : {
"begin" : 1889,
"end" : 1894
},
"text" : "2005",
"text_normalized" : "Year 1",
"row_index_begin" : 1,
"row_index_end" : 1,
"column_index_begin" : 3,
"column_index_end" : 3
}, {
"cell_id" : "colHeader-2057-2061",
"location" : {
"begin" : 2057,
"end" : 2062
},
"text" : "2004",
"text_normalized" : "Year 2",
"row_index_begin" : 1,
"row_index_end" : 1,
"column_index_begin" : 4,
"column_index_end" : 4
} ],
"row_headers" : [ {
"cell_id" : "rowHeader-2244-2262",
"location" : {
"begin" : 2244,
"end" : 2263
},
"text" : "Statutory tax rate",
"text_normalized" : "Statutory tax rate",
"row_index_begin" : 2,
"row_index_end" : 2,
"column_index_begin" : 0,
"column_index_end" : 0
}, {
"cell_id" : "rowHeader-3197-3217",
"location" : {
"begin" : 3197,
"end" : 3218
},
"text" : "IRS audit settlement",
"text_normalized" : "IRS audit settlement",
"row_index_begin" : 3,
"row_index_end" : 3,
"column_index_begin" : 0,
"column_index_end" : 0
}, {
"cell_id" : "rowHeader-4148-4176",
"location" : {
"begin" : 4148,
"end" : 4177
},
"text" : "Dividends received deduction",
"text_normalized" : "Dividends received deduction",
"row_index_begin" : 4,
"row_index_end" : 4,
"column_index_begin" : 0,
"column_index_end" : 0
}, {
"cell_id" : "rowHeader-5106-5130",
"location" : {
"begin" : 5106,
"end" : 5131
},
"text" : "Total effective tax rate",
"text_normalized" : "Total effective tax rate",
"row_index_begin" : 5,
"row_index_end" : 5,
"column_index_begin" : 0,
"column_index_end" : 0
} ],
"key_value_pairs" : [ ],
"body_cells" : [ {
"cell_id" : "bodyCell-2450-2455",
"location" : {
"begin" : 2450,
"end" : 2456
},
"text" : "35.0%",
"row_index_begin" : 2,
"row_index_end" : 2,
"column_index_begin" : 1,
"column_index_end" : 1,
"row_header_ids" : [ "rowHeader-2244-2262" ],
"row_header_texts" : [ "Statutory tax rate" ],
"row_header_texts_normalized" : [ "Statutory tax rate" ],
"column_header_ids" : [ "colHeader-1050-1082", "colHeader-1544-1548" ],
"column_header_texts" : [ "Three months ended September 30,", "2005" ],
"column_header_texts_normalized" : [ "Three months ended September 30,", "Year 1" ],
"attributes": [ ]
}, {
"cell_id" : "bodyCell-2633-2638",
"location" : {
"begin" : 2633,
"end" : 2639
},
"text" : "35.0%",
"row_index_begin" : 2,
"row_index_end" : 2,
"column_index_begin" : 2,
"column_index_end" : 2,
"row_header_ids" : [ "rowHeader-2244-2262" ],
"row_header_texts" : [ "Statutory tax rate" ],
"row_header_texts_normalized" : [ "Statutory tax rate" ],
"column_header_ids" : [ "colHeader-1050-1082", "colHeader-1712-1716" ],
"column_header_texts" : [ "Three months ended September 30,", "2004" ],
"column_header_texts_normalized" : [ "Three months ended September 30,", "Year 2" ],
"attributes": [ ]
}, {
"cell_id" : "bodyCell-2825-2830",
"location" : {
"begin" : 2825,
"end" : 2831
},
"text" : "35.0%",
"row_index_begin" : 2,
"row_index_end" : 2,
"column_index_begin" : 3,
"column_index_end" : 3,
"row_header_ids" : [ "rowHeader-2244-2262" ],
"row_header_texts" : [ "Statutory tax rate" ],
"row_header_texts_normalized" : [ "Statutory tax rate" ],
"column_header_ids" : [ "colHeader-1270-1301", "colHeader-1889-1893" ],
"column_header_texts" : [ "Nine months ended September 30,", "2005" ],
"column_header_texts_normalized" : [ "Nine months ended September 30,", "Year 1" ],
"attributes": [ ]
}, {
"cell_id" : "bodyCell-3008-3013",
"location" : {
"begin" : 3008,
"end" : 3014
},
"text" : "35.0%",
"row_index_begin" : 2,
"row_index_end" : 2,
"column_index_begin" : 4,
"column_index_end" : 4,
"row_header_ids" : [ "rowHeader-2244-2262" ],
"row_header_texts" : [ "Statutory tax rate" ],
"row_header_texts_normalized" : [ "Statutory tax rate" ],
"column_header_ids" : [ "colHeader-1270-1301", "colHeader-2057-2061" ],
"column_header_texts" : [ "Nine months ended September 30,", "2004" ],
"column_header_texts_normalized" : [ "Nine months ended September 30,", "Year 2" ],
"attributes": [ ]
},
...
],
"contexts": [ ]
}
Informazioni sulle coppie chiave - e - valore
Le tabelle a volte contengono coppie chiave-valore che si estendono su più celle della tabella. Table Understanding è in grado di rilevare i seguenti tipi di coppie di tabelle.
-
Semplici coppie chiave-valore in celle adiacenti, come nell'esempio di tabella seguente:
Tabella di base Chiave Valore Numero articolo 123456789Data 1/1/2019Quantità $1,000 -
Coppie chiave-valore nella stessa cella, come nell'esempio di tabella seguente:
Tabella complessa Coppie chiave-valore Coppie chiave-valore Numero di articolo: 123456789Importo: $1000Data: 1/1/2019Indirizzo: 123 Anywhere Dr