Compreender tabelas

Aplique o enriquecimento Table Understanding para obter informações detalhadas sobre tabelas e dados relacionados à tabela dentro de documentos.

As tarefas a seguir geram um campo HTML com informações de tabelas e aplicam o enriquecimento da Tabela Entenda para ele para sua coleta automaticamente:

  • Se você utilizar a ferramenta Smart Document Understanding para definir um modelo SDU treinado ou pré-treinado, o enriquecimento Table Understanding será aplicado ao campo html que é gerado para a coleta.

  • Se você criar um tipo de projeto Document Retrieval for Contracts, um modelo SDU pré-treinado é aplicado à sua coleção automaticamente. Como resultado, o enriquecimento Table Understanding é aplicado ao campo html que é gerado para a coleta.

    Para obter mais informações, consulte Smart Document Understanding.

Antes de Iniciar

Os documentos em sua coleção devem conter um campo com representações HTML das tabelas. Essas informações geralmente são armazenadas no campo html.. Se a sua coleção consistir em arquivos CSV ou JSON, ela poderá ter um campo diferente do campo html que contém informações da tabela no formato HTML

Aplicando a tabela entendendo o enriquecimento

Você pode aplicar o enriquecimento apenas em um campo que contém uma representação HTML da tabela.

Para aplicar o enriquecimento, conclua as etapas a seguir:

  1. A partir da pane de navegação, abra a página Gerenciar coleções e, em seguida, clique em uma coleção para abri-la.

  2. Clique na guia Enriquecimentos.

  3. Encontre o enriquecimento Table Understanding.

  4. Selecione o campo html na lista de campos.

    Escolha o campo que contém representações HTML das tabelas.

Após a aplicação do enriquecimento, você pode obter resultados válidos ao enviar consultas que requerem Discovery para encontrar informações que são armazenadas em tabelas.

Um desenvolvedor pode consultar tabelas usando a API. Para obter mais informações, consulte Parâmetros de consulta.

Para obter mais informações sobre como aplicar o enriquecimento de entendimento de tabela usando a API, consulte Aplicando enriquecimentos usando a API..

Trabalhando com dados tabulares em Python

Use Extensões de texto para Pandas, uma biblioteca de software livre da IBM, para ler as tabelas que foram analisadas a partir de documentos no Discovery em objetos do DataFrame do pandas. Um pandas DataFrame é um objeto que representa dados tabulares bidimensionais em um formulário que pode ser transformado e manipulado para análise de recebimento de dados em Python....

Por exemplo, é possível extrair conteúdo de tabelas em muitos documentos de relatório anual e reconstruí-lo em uma única tabela que inclui pontos de interesse de dados plurianuais. Para obter mais informações, leia a postagem do blog Extração de informações estruturadas de tabelas em documentos PDF com Pandas e IBM Watson em Medium.com.

Esquema de saída

O esquema de saída do enriquecimento Table Understanding é conforme a seguir.

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

Disposição do esquema

O esquema é organizado conforme a seguir.

  • tables: Uma matriz que define as tabelas que são identificadas no documento de entrada.

    • location: o local da tabela atual conforme definido por seus índices begin e end no documento de entrada.

    • text: os conteúdos textuais da tabela atual do documento de entrada sem conteúdo de marcação associado.

    • section_title: se identificado, a localização de um título de seção contido na tabela atual. Vazio se nenhum título da seção for identificado.

      • text: o texto do título da seção identificado.
      • location: o local do título da seção no documento de entrada conforme definido por seus índices begin e end.
    • title: Se identificado, o título ou a legenda da tabela atual do formulário Table x.: .... Vazio quando nenhum título é identificado. Quando presente, o title é excluído da matriz contexts da mesma tabela.

      • location: o local do título no documento de entrada conforme definido por seus índices begin e end.
      • text: o texto do título ou da legenda da tabela identificada.
    • table_headers: uma matriz de células de nível de tabela aplicáveis como cabeçalhos para todas as outras células da tabela atual. Cada cabeçalho da tabela é definido como uma coleção dos elementos a seguir:

      • cell_id: o ID exclusivo da célula na tabela atual.
      • location: o local da célula no documento de entrada conforme definido por seus índices begin e end.
      • text: os conteúdos textuais da célula por meio do documento de entrada sem conteúdo de marcação associado.
      • row_index_begin: o índice begin do local de row da célula na tabela atual.
      • row_index_end: o índice end do local de row da célula na tabela atual.
      • column_index_begin: o índice begin do local de column da célula na tabela atual.
      • column_index_end: o índice end do local de column da célula na tabela atual.
    • column_headers: uma matriz de células de nível de coluna da tabela atual, cada uma delas aplicável como um cabeçalho para as outras células na própria coluna. Cada cabeçalho da coluna é definido como uma coleção dos itens a seguir:

      • cell_id: o ID exclusivo da célula na tabela atual.
      • location: o local da célula no documento de entrada conforme definido por seus índices begin e end.
      • text: os conteúdos textuais da célula por meio do documento de entrada sem conteúdo de marcação associado.
      • text_normalized: texto do cabeçalho da coluna normalizada.
      • row_index_begin: o índice begin do local de row da célula na tabela atual.
      • row_index_end: o índice end do local de row da célula na tabela atual.
      • column_index_begin: o índice begin do local de column da célula na tabela atual.
      • column_index_end: o índice end do local de column da célula na tabela atual.
    • row_headers: uma matriz de células de nível de linha da tabela atual, cada uma delas aplicável como um cabeçalho para as outras células na própria linha. Cada cabeçalho de linha é definido como uma coleção dos itens a seguir:

      • cell_id: o ID exclusivo da célula na tabela atual.
      • location: o local da célula no documento de entrada conforme definido por seus índices begin e end.
      • text: os conteúdos textuais da célula por meio do documento de entrada sem conteúdo de marcação associado.
      • text_normalized: texto do cabeçalho da linha normalizado.
      • row_index_begin: o índice begin do local de row da célula na tabela atual.
      • row_index_end: o índice end do local de row da célula na tabela atual.
      • column_index_begin: o índice begin do local de column da célula na tabela atual.
      • column_index_end: o índice end do local de column da célula na tabela atual.
    • body_cells: uma matriz de células que não são de cabeçalho de tabela, de coluna ou de linha, da tabela atual com associações de cabeçalho de linha e coluna correspondentes. Cada célula do corpo é definida como uma coleção dos itens a seguir:

      • cell_id: o ID exclusivo da célula na tabela atual.

      • location: o local da célula no documento de entrada conforme definido por seus índices begin e end.

      • text: os conteúdos textuais da célula por meio do documento de entrada sem conteúdo de marcação associado.

      • row_index_begin: o índice begin do local row dessa célula na tabela atual.

      • row_index_end: o índice end do local row dessa célula na tabela atual.

      • column_index_begin: o índice begin do local column dessa célula na tabela atual.

      • column_index_end: o índice end do local column dessa célula na tabela atual.

      • row_header_ids: Uma matriz de valores, em que cada valor é o valor de ID da célula de um cabeçalho de linha associado a essa célula do corpo.

      • row_header_texts: uma matriz de valores, em que cada valor é o texto de um cabeçalho de linha para essa célula de corpo.

      • row_header_texts_normalized: uma matriz de valores, em que cada valor é o texto normalizado de um cabeçalho de linha para essa célula de corpo.

      • column_header_ids: Uma matriz de valores, em que cada valor é o valor de ID da célula de um cabeçalho de coluna que está associado a essa célula do corpo.

      • column_header_texts: uma matriz de valores, em que cada valor é o texto de um cabeçalho de coluna para essa célula do corpo...

      • column_header_texts_normalized: uma matriz de valores, em que cada valor é o texto normalizado de um cabeçalho da coluna para essa célula do corpo.

      • attributes: uma matriz que identifica atributos de documento. Cada objeto na matriz consiste em três elementos:

        • type: O tipo de atributo. Os valores possíveis são Address, Currency, DateTime, Duration, Location, Number, Organization, Percentage e Person.
        • text: o texto associado ao atributo.
        • location: o local do atributo conforme definido por seus índices begin e end.
    • key_value_pairs: uma matriz que especifica qualquer par chave-valor em tabelas no documento de entrada. Para obter mais informações, consulte Entendendo os pares chave-valor.

      • key: um objeto que especifica uma chave para um par chave-valor.

        • cell_id: o ID exclusivo da chave na tabela.
        • location: a localização da célula de chave no documento de entrada, conforme definido por seus índices begin e end.
        • text: o conteúdo de texto da célula da tabela sem marcação HTML.
      • value: uma matriz que especifica o valor ou valores para um par chave-valor.

        • cell_id: o ID exclusivo do valor na tabela.
        • location: a localização da célula de valor no documento de entrada, conforme definido por seus índices begin e end.
        • text: o conteúdo de texto da célula da tabela sem marcação HTML.
    • contexts: uma lista de material relacionado que precede e segue a tabela, excluindo seu título da seção, que é fornecido no campo section_title. O material relacionado inclui sentenças relacionadas, notas de rodapé e sentenças de outras partes do documento que se referem à tabela. A lista é representada como uma matriz. Cada objeto na matriz consiste nos elementos a seguir:

      • text: o conteúdo de texto de um material relacionado do documento de entrada, sem marcação HTML.
      • location: o local do material relacionado no documento de entrada, conforme definido por seus índices begin e end.

Notas sobre o esquema de saída da tabela

  • Os valores de índice da linha e da coluna por célula são baseados em zero e, portanto, iniciam com 0.
  • Múltiplos valores em matrizes de elementos row_header_ids e row_header_texts indicam uma possível hierarquia de cabeçalhos de linha.
  • Múltiplos valores em matrizes de elementos column_header_ids e column_header_texts indicam uma possível hierarquia de cabeçalhos de coluna.

Exemplos

A tabela a seguir é um exemplo de tabela de um documento de entrada.

de exemplo*Tabela de

A tabela é composta da seguinte forma:

Composição da
da tabela de

A sintaxe a seguir é usada na tabela:

  • ** Bold text ** indica um cabeçalho da coluna
  • O texto em itálico indica um cabeçalho de linha
  • O texto não estilizado indica uma célula do corpo

A saída do serviço representa a primeira célula do corpo do exemplo (ou seja, a primeira célula na linha 3 com um valor de 35.0% ) da seguinte forma:

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

Entendendo pares chave-e-valor

Às vezes, as tabelas contêm pares de chave e valor que abrangem várias células da tabela. O Table Understanding pode detectar os seguintes tipos de pares tabulares.

  • Pares simples de chave e valor em células adjacentes, como no exemplo de tabela a seguir:

    Tabela básica
    Chave Valor
    Número do item 123456789
    Data 1/1/2019
    Quantia $1,000
  • Pares de chave e valor na mesma célula, como no exemplo de tabela a seguir:

    Tabela complexa
    Pares chave-valor Pares chave-valor
    Número do item: 123456789 Valor: $1000
    Data: 1/1/2019 Endereço: 123 Anywhere Dr