Comprender tablas

Aplique el enriquecimiento Comprensión de tablas para obtener información detallada sobre tablas y datos relacionados con tablas en los documentos.

Las tareas siguientes generan un campo HTML con información de tabla y le aplican automáticamente el enriquecimiento de comprensión de tabla para la colección:

  • Si utiliza la herramienta Smart Document Understanding para definir un modelo de SDU entrenado por el usuario o preentrenado, el enriquecimiento de Table Understanding se aplica al campo html que se genera para la colección.

  • Si crea un tipo de proyecto Recuperación de documentos para contratos, se aplica automáticamente un modelo de SDU preentrenado a la colección. Como resultado, el enriquecimiento de Table Understanding se aplica al campo html que se genera para la colección.

    Para obtener más información, consulte Smart Document Understanding.

Antes de empezar

Los documentos de la colección deben contener un campo con representaciones HTML de las tablas. Esta información a menudo se almacena en el campo html. Si la colección consta de archivos CSV o JSON, es posible que tenga un campo que no sea el campo html que contiene información de tabla en formato HTML.

Aplicación del enriquecimiento de comprensión de tabla

Puede aplicar el enriquecimiento sólo a un campo que contenga una representación HTML de la tabla.

Para aplicar el enriquecimiento, complete los siguientes pasos:

  1. En el panel de navegación, abra la página Gestionar colecciones y, a continuación, pulse una colección para abrirla.

  2. Pulse el separador Enriquecimientos.

  3. Busque el enriquecimiento Comprensión de tablas.

  4. Seleccione el campo " html " (Dirección de correo electrónico) de la lista de campos.

    Elija el campo que contiene representaciones HTML de las tablas.

Después de aplicar el enriquecimiento, puede obtener resultados válidos cuando envíe consultas que requieran Discovery para buscar información almacenada en tablas.

Un desarrollador puede consultar tablas utilizando la API. Para obtener más información, consulte Parámetros de consulta.

Para obtener más información sobre cómo aplicar el enriquecimiento de comprensión de tabla utilizando la API, consulte Aplicación de enriquecimientos utilizando la API.

Cómo trabajar con datos tabulares en Python

Utilice Text Extensions for Pandas, una biblioteca de código abierto de IBM, para leer las tablas que se han analizado de documentos en Discovery en objetos DataFrame de pandas. Un pandas DataFrame es un objeto que representa datos tabulares bidimensionales en un formato que se puede transformar y manipular para el análisis en sentido descendente en Python.

Por ejemplo, puede extraer contenido de tablas en muchos documentos de informe anual y reconstruirlo en una única tabla que incluya puntos de datos de varios años de interés. Para obtener más información, consulte la publicación de blog Structured Information Extraccion from Tables in PDF Documents with Pandas and IBM Watson en Medium.com.

Esquema de salida

El esquema de salida del enriquecimiento de Table Understanding es el siguiente.

{
  "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
          }
        },
        ...
      ]
    }
  ]
}

Organización de un esquema

El esquema se organiza de la manera siguiente.

  • tables: Una matriz que define las tablas que se identifican en el documento de entrada.

    • location: La ubicación de la tabla actual como la definen los desplazamientos begin (inicio) y end (fin) en el documento de entrada.

    • text: Los contenidos textuales de la tabla actual del documento de entrada sin contenido de marcación asociado.

    • section_title: Si se identifica, la ubicación de un título de sección contenido en la tabla actual. Aparece vacío si no se identifica ningún título de sección.

      • text: El texto del título de sección identificado.
      • location: La ubicación del título de sección en el documento de entrada como se define en los índices begin y end.
    • title: Si se identifica, el título o pie de la tabla actual del formulario Table x.: .... Vacío cuando no se identifica ningún título. Cuando está presente, el atributo " title " se excluye del conjunto " contexts " de la misma tabla.

      • location: La ubicación del título en el documento de entrada como se define en los índices begin y end.
      • text: El texto del título o descripción de la tabla identificada.
    • table_headers: Una matriz de las celdas a nivel de tabla aplicables como cabeceras al resto de celdas de la tabla actual. Cada cabecera de tabla se define como una colección de los elementos siguientes:

      • cell_id: El ID exclusivo de la célula en la tabla actual.
      • location: La ubicación de la celda en el documento de entrada como se define en los índices begin y end.
      • text: Los contenidos textuales de la celda del documento de entrada sin contenido de marcación asociado.
      • row_index_begin: El índice begin de la ubicación row de la celda en la tabla actual.
      • row_index_end: El índice end de la ubicación row de la celda en la tabla actual.
      • column_index_begin: El índice begin de la ubicación column de la celda en la tabla actual.
      • column_index_end: El índice end de la ubicación column de la celda en la tabla actual.
    • column_headers: Una matriz de las celdas a nivel de columna, cada una aplicable como cabecera a otras celdas en la misma columna de la tabla actual. Cada cabecera de columna se define como una colección de los elementos siguientes:

      • cell_id: El ID exclusivo de la célula en la tabla actual.
      • location: La ubicación de la celda en el documento de entrada como se define en los índices begin y end.
      • text: Los contenidos textuales de la celda del documento de entrada sin contenido de marcación asociado.
      • text_normalized: texto de cabecera de columna normalizado.
      • row_index_begin: El índice begin de la ubicación row de la celda en la tabla actual.
      • row_index_end: El índice end de la ubicación row de la celda en la tabla actual.
      • column_index_begin: El índice begin de la ubicación column de la celda en la tabla actual.
      • column_index_end: El índice end de la ubicación column de la celda en la tabla actual.
    • row_headers: Una matriz de las celdas a nivel de fila, cada una aplicable como cabecera a otras celdas de la misma fila de la tabla actual. Cada cabecera de fila se define como una colección de los elementos siguientes:

      • cell_id: El ID exclusivo de la célula en la tabla actual.
      • location: La ubicación de la celda en el documento de entrada como se define en los índices begin y end.
      • text: Los contenidos textuales de la celda del documento de entrada sin contenido de marcación asociado.
      • text_normalized: texto de cabecera de fila normalizado.
      • row_index_begin: El índice begin de la ubicación row de la celda en la tabla actual.
      • row_index_end: El índice end de la ubicación row de la celda en la tabla actual.
      • column_index_begin: El índice begin de la ubicación column de la celda en la tabla actual.
      • column_index_end: El índice end de la ubicación column de la celda en la tabla actual.
    • body_cells: Una matriz de las celdas que no son de cabecera de tabla, cabecera de columna ni cabecera de fila de la tabla actual con las asociaciones de cabecera de columna y fila correspondientes. Cada celda del cuerpo se define como una colección de los elementos siguientes:

      • cell_id: El ID exclusivo de la célula en la tabla actual.

      • location: La ubicación de la celda en el documento de entrada como se define en los índices begin y end.

      • text: Los contenidos textuales de la celda del documento de entrada sin contenido de marcación asociado.

      • row_index_begin: El índice begin de la ubicación row de la celda en la tabla actual.

      • row_index_end: El índice end de la ubicación row de la celda en la tabla actual.

      • column_index_begin: El índice begin de la ubicación column de la celda en la tabla actual.

      • column_index_end: El índice end de la ubicación column de la celda en la tabla actual.

      • row_header_ids: Una matriz de valores, donde cada valor es el valor de identificación de celda de un encabezado de fila que está asociado con esta celda de cuerpo.

      • row_header_texts: Una matriz de valores, donde cada valor es el texto de una cabecera de fila para esta celda del cuerpo.

      • row_header_texts_normalized: Una matriz de valores, donde cada valor es el texto normalizado de una cabecera de fila para esta celda del cuerpo.

      • column_header_ids: Una matriz de valores, donde cada valor es el valor de identificación de celda de un encabezado de columna que está asociado con esta celda de cuerpo.

      • column_header_texts: Una matriz de valores, donde cada valor es el texto de una cabecera de columna para esta celda del cuerpo.

      • column_header_texts_normalized: una matriz de valores, donde cada valor es el texto normalizado de una cabecera de columna para esta celda del cuerpo.

      • attributes: Una matriz que identifica los atributos de documento. Cada objeto de la matriz consiste en tres elementos:

        • type: El tipo de atributo. Los valores posibles son Address, Currency, DateTime, Duration, Location, Number, Organization, Percentage y Person.
        • text: El texto que está asociado con el atributo.
        • location: La ubicación del atributo como la definen los índices begin y end.
    • key_value_pairs: Una matriz que especifica los pares de clave y valor de las tablas del documento de entrada. Para obtener más información, consulte Visión general de los pares de clave y valor.

      • key: Un objeto que especifica una clave para un par de clave y valor.

        • cell_id: El ID exclusivo de la clave de la tabla.
        • location: La ubicación de la celda de clave en el documento de entrada como se define en los índices begin y end.
        • text: El contenido de texto de la celda de la tabla sin marcación HTML.
      • value: Una matriz que especifica el valor o los valores para un par de clave y valor.

        • cell_id: El ID exclusivo del valor en la tabla.
        • location: La ubicación de la celda de clave en el documento de entrada como se define en los índices begin y end.
        • text: El contenido de texto de la celda de la tabla sin marcación HTML.
    • contexts: Una lista de material relacionado que va antes y después de la tabla, sin incluir el título de la sección, que se proporciona en el campo section_title. El material relacionado incluye frases relacionadas, notas al pie de página y frases de otras partes del documento que hacen referencia a la tabla. La lista se representa como una matriz. Cada objeto de la matriz consta de los elementos siguientes:

      • text: El contenido de texto de un material relacionado del documento de entrada, sin marcación HTML.
      • location: La ubicación del material relacionado en el documento de entrada como se define en los índices begin y end.

Notas sobre el esquema de salida de tabla

  • Los valores de índice de columna y fila por celda están basados en cero y empiezan por 0.
  • Los valores múltiples en las matrices de los elementos row_header_ids y row_header_texts indican una posible jerarquía de las cabeceras de fila.
  • Los valores múltiples en las matrices de los elementos column_header_ids y column_header_texts indican una posible jerarquía de cabeceras de columna.

Ejemplos

La siguiente tabla es una tabla de ejemplo de un documento de entrada.

Example table
Table example

La tabla se compone de la siguiente manera:

de la mesa*Anatomía de la mesa de

En la tabla se utiliza la sintaxis siguiente:

  • Texto en negrita indica una cabecera de columna
  • El texto en cursiva indica un encabezado de fila
  • Texto sin estilo indica una celda del cuerpo

El resultado del servicio representa la primera célula del cuerpo del ejemplo (es decir, la primera célula de la fila 3 con un valor de 35.0% ) de la siguiente manera:

{
  "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": [ ]
}

Visión general de los pares de clave y valor

Las tablas a veces contienen pares de clave y valor que abarcan varias celdas de la tabla. Tabla Comprensión puede detectar los siguientes tipos de pares tabulares.

  • Simples pares de clave y valor en celdas adyacentes, como en la siguiente tabla de ejemplo:

    Tabla básica
    Clave Valor
    Número de artículo 123456789
    Fecha 1/1/2019
    Importe $1,000
  • Pares de clave y valor en la misma celda, como en la siguiente tabla de ejemplo:

    Tabla compleja
    Pares clave-valor Pares clave-valor
    Número de artículo: 123456789 Importe: $1000
    Fecha: 1/1/2019 Dirección: 123 Anywhere Dr