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 Understandingserá aplicado ao campohtmlque é 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 campohtmlque é 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:
-
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.
-
Clique na guia Enriquecimentos.
-
Encontre o enriquecimento Table Understanding.
-
Selecione o campo
htmlna 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 índicesbegineendno 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 índicesbegineend.
-
title: Se identificado, o título ou a legenda da tabela atual do formulárioTable x.: .... Vazio quando nenhum título é identificado. Quando presente, otitleé excluído da matrizcontextsda mesma tabela.location: o local do título no documento de entrada conforme definido por seus índicesbegineend.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 índicesbegineend.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 índicebegindo local derowda célula na tabela atual.row_index_end: o índiceenddo local derowda célula na tabela atual.column_index_begin: o índicebegindo local decolumnda célula na tabela atual.column_index_end: o índiceenddo local decolumnda 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 índicesbegineend.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 índicebegindo local derowda célula na tabela atual.row_index_end: o índiceenddo local derowda célula na tabela atual.column_index_begin: o índicebegindo local decolumnda célula na tabela atual.column_index_end: o índiceenddo local decolumnda 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 índicesbegineend.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 índicebegindo local derowda célula na tabela atual.row_index_end: o índiceenddo local derowda célula na tabela atual.column_index_begin: o índicebegindo local decolumnda célula na tabela atual.column_index_end: o índiceenddo local decolumnda 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 índicesbegineend. -
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 índicebegindo localrowdessa célula na tabela atual. -
row_index_end: o índiceenddo localrowdessa célula na tabela atual. -
column_index_begin: o índicebegindo localcolumndessa célula na tabela atual. -
column_index_end: o índiceenddo localcolumndessa 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ãoAddress,Currency,DateTime,Duration,Location,Number,Organization,PercentageePerson.text: o texto associado ao atributo.location: o local do atributo conforme definido por seus índicesbegineend.
-
-
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 índicesbegineend.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 índicesbegineend.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 camposection_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 índicesbegineend.
-
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_idserow_header_textsindicam uma possível hierarquia de cabeçalhos de linha. - Múltiplos valores em matrizes de elementos
column_header_idsecolumn_header_textsindicam uma possível hierarquia de cabeçalhos de coluna.
Exemplos
A tabela a seguir é um exemplo de tabela de um documento de entrada.
A tabela é composta da seguinte forma:
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 123456789Data 1/1/2019Quantia $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: 123456789Valor: $1000Data: 1/1/2019Endereço: 123 Anywhere Dr