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 Understanding viene applicato al campo html generato 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 Understanding viene applicato al campo html generato 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:

  1. Dal riquadro di navigazione, aprire la pagina Gestisci raccolte e fare clic su una raccolta per aprirla.

  2. Fai clic sulla scheda Enrichments.

  3. Trova l'arricchimento Table Understanding.

  4. Selezionare il campo html dall'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 indici begin e end nel 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 indici begin e end.
    • title: Se identificato, il titolo o la didascalia della tabella corrente del modulo Table x.: .... Vuoto se non viene identificato alcun titolo. Quando è presente, title è escluso dalla matrice contexts della stessa tabella.

      • location: l'ubicazione del titolo nel documento di input come definita dai relativi indici begin e end.
      • 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 indici begin e end.
      • text: il contenuto testuale della cella dal documento di input senza il contenuto di markup associato.
      • row_index_begin: l'indice begin dell'ubicazione row della cella nella tabella corrente.
      • row_index_end: l'indice end dell'ubicazione row della cella nella tabella corrente.
      • column_index_begin: l'indice begin dell'ubicazione column della cella nella tabella corrente.
      • column_index_end: l'indice end dell'ubicazione column della 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 indici begin e end.
      • 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'indice begin dell'ubicazione row della cella nella tabella corrente.
      • row_index_end: l'indice end dell'ubicazione row della cella nella tabella corrente.
      • column_index_begin: l'indice begin dell'ubicazione column della cella nella tabella corrente.
      • column_index_end: l'indice end dell'ubicazione column della 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 indici begin e end.
      • 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'indice begin dell'ubicazione row della cella nella tabella corrente.
      • row_index_end: l'indice end dell'ubicazione row della cella nella tabella corrente.
      • column_index_begin: l'indice begin dell'ubicazione column della cella nella tabella corrente.
      • column_index_end: l'indice end dell'ubicazione column della 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 indici begin e end.

      • text: il contenuto testuale della cella dal documento di input senza il contenuto di markup associato.

      • row_index_begin: l'indice begin dell'ubicazione row di questa cella nella tabella corrente.

      • row_index_end: l'indice end dell'ubicazione row di questa cella nella tabella corrente.

      • column_index_begin: l'indice begin dell'ubicazione column di questa cella nella tabella corrente.

      • column_index_end: l'indice end dell'ubicazione column di 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 sono Address, Currency, DateTime, Duration, Location, Number, Organization, Percentage e Person.
        • text: il testo associato all'attributo.
        • location: l'ubicazione dell'attributo come definita dai relativi indici begin e end.
    • 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 indici begin e end.
        • 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 indici begin e end.
        • 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 campo section_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 indici begin e end.

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_ids e row_header_texts indicano una possibile gerarchia di intestazioni di riga.
  • Più valori negli array di elementi column_header_ids e column_header_texts indicano una possibile gerarchia di intestazioni di colonna.

Esempi

La tabella seguente è un esempio di tabella di un documento di input.

Tabella di
di

La tabella è composta come segue:

Composizione della
della
di esempio*

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 123456789
    Data 1/1/2019
    Quantità $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: 123456789 Importo: $1000
    Data: 1/1/2019 Indirizzo: 123 Anywhere Dr