Comprendre les tables
Appliquez l'enrichissement Table Understanding pour obtenir des informations détaillées sur les tables et les données liées aux tables dans les documents.
Les tâches suivantes génèrent une zone HTML avec des informations de table et lui appliquent automatiquement l'enrichissement Table Understanding pour votre collection:
-
Si vous utilisez l'outil Smart Document Understanding pour définir un modèle SDU entraîné par l'utilisateur ou préentraîné, l'enrichissement
Table Understandingest appliqué à la zonehtmlqui est générée pour la collection. -
Si vous créez un type de projet Document Retrieval for Contracts, un modèle SDU préentraîné est appliqué automatiquement à votre collection. Par conséquent, l'enrichissement
Table Understandingest appliqué à la zonehtmlqui est générée pour la collection.Pour plus d'informations, voir Smart Document Understanding.
Avant de commencer
Les documents de votre collection doivent contenir une zone avec des représentations HTML de vos tableaux. Ces informations sont souvent stockées dans la zone html. Si votre collection se compose de fichiers CSV ou JSON, elle peut
comporter une zone autre que la zone html qui contient des informations de table au format HTML.
Application de l'enrichissement de compréhension de table
Vous pouvez appliquer l'enrichissement uniquement à une zone qui contient une représentation HTML de la table.
Pour appliquer l'enrichissement, procédez comme suit :
-
Dans le panneau de navigation, ouvrez la page Gestion des collections, puis cliquez sur une collection pour l'ouvrir.
-
Cliquez sur l'onglet Enrichments.
-
Recherchez l'enrichissement Table Understanding.
-
Sélectionnez le champ
htmldans la liste des champs.Choisissez la zone qui contient les représentations HTML des tableaux.
Une fois l'enrichissement appliqué, vous pouvez obtenir des résultats valides lorsque vous soumettez des requêtes qui nécessitent Discovery pour rechercher des informations stockées dans des tables.
Un développeur peut interroger des tables à l'aide de l'API. Pour plus d'informations, voir Paramètres de requête.
Pour plus d'informations sur l'application de l'enrichissement de compréhension de table à l'aide de l'API, voir Application d'enrichissements à l'aide de l'API.
Utilisation des données tabulaires dans Python
Utilisez Text Extensions for Pandas, une bibliothèque open source d' IBM, pour lire les tables qui ont été analysées à partir de documents dans Discovery dans des objets DataFrame pandas. Un DataFrame pandas est un objet qui représente des données tabulaires bidimensionnelles sous une forme pouvant être transformées et manipulées pour une analyse en aval dans Python.
Par exemple, vous pouvez extraire du contenu de tableaux dans de nombreux documents de rapport annuel et le reconstruire en un seul tableau qui inclut des points de données d'intérêt sur plusieurs années. Pour plus d'informations, lisez l'article de blogue Structured Information Extraction from Tables in PDF Documents with Pandas and IBM Watson sur Medium.com.
Schéma de sortie
Le schéma de sortie de l'enrichissement Table Understanding est le suivant.
{
"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
}
},
...
]
}
]
}
Organisation du schéma
Le schéma est organisé comme suit.
-
tables: Un tableau qui définit les tables identifiées dans le document d'entrée.-
location: Emplacement de la table en cours telle que définie par ses indexbeginetenddans le document d'entrée. -
text: Contenu textuel de la table en cours provenant du document d'entrée et sans contenu de balisage associé. -
section_title: Si identifié, emplacement d'un titre de section se trouvant dans la table en cours. Vide si aucun titre de section n'est identifié.text: Texte du titre de section identifié.location: Emplacement du titre de section dans le document d'entrée tel que défini par ses indexbeginetend.
-
title: En cas d'identification, le titre ou la légende de la table en cours du formulaireTable x.: .... Vide si aucun titre n'est identifié. Lorsqu'il est présent, le tableautitleest exclu du tableaucontextsde la même table.location: Emplacement du titre dans le document d'entrée tel que défini par ses indexbeginetend.text: Texte du titre ou de la légende de la table identifiée.
-
table_headers: Matrice de cellules de niveau table applicables en tant qu'en-tête à toutes les autres cellules de la table en cours. Chaque en-tête de table est défini en tant que collection des éléments suivants :cell_id: ID unique de la cellule dans la table en cours.location: Emplacement de la cellule dans le document d'entrée tel que défini par ses indexbeginetend.text: Contenu textuel de la cellule provenant du document d'entrée et sans contenu de balisage associé.row_index_begin: Indexbeginde l'emplacementrowde la cellule dans la table en cours.row_index_end: Indexendde l'emplacementrowde la cellule dans la table en cours.column_index_begin: Indexbeginde l'emplacementcolumnde la cellule dans la table en cours.column_index_end: Indexendde l'emplacementcolumnde la cellule dans la table en cours.
-
column_headers: Matrice de cellules de niveau colonne, toutes applicables en tant qu'en-tête à d'autres cellules de la même colonne, de la table en cours. Chaque en-tête de colonne est défini en tant que collection des éléments suivants :cell_id: ID unique de la cellule dans la table en cours.location: Emplacement de la cellule dans le document d'entrée tel que défini par ses indexbeginetend.text: Contenu textuel de la cellule provenant du document d'entrée et sans contenu de balisage associé.text_normalized: texte d'en-tête de colonne normalisé.row_index_begin: Indexbeginde l'emplacementrowde la cellule dans la table en cours.row_index_end: Indexendde l'emplacementrowde la cellule dans la table en cours.column_index_begin: Indexbeginde l'emplacementcolumnde la cellule dans la table en cours.column_index_end: Indexendde l'emplacementcolumnde la cellule dans la table en cours.
-
row_headers: Matrice de cellules de niveau ligne, toutes applicables en tant qu'en-tête à d'autres cellules de la même ligne, de la table en cours. Chaque en-tête de ligne est défini en tant que collection des éléments suivants :cell_id: ID unique de la cellule dans la table en cours.location: Emplacement de la cellule dans le document d'entrée tel que défini par ses indexbeginetend.text: Contenu textuel de la cellule provenant du document d'entrée et sans contenu de balisage associé.text_normalized: texte d'en-tête de ligne normalisé.row_index_begin: Indexbeginde l'emplacementrowde la cellule dans la table en cours.row_index_end: Indexendde l'emplacementrowde la cellule dans la table en cours.column_index_begin: Indexbeginde l'emplacementcolumnde la cellule dans la table en cours.column_index_end: Indexendde l'emplacementcolumnde la cellule dans la table en cours.
-
body_cells: Matrice de cellules qui ne sont ni des cellules d'en-tête de table, d'en-tête de colonne ou d'en-tête de ligne, de la table en cours avec associations d'en-tête de colonne et de ligne correspondantes. Chaque cellule de corps est définie en tant que collection des éléments suivants :-
cell_id: ID unique de la cellule dans la table en cours. -
location: Emplacement de la cellule dans le document d'entrée tel que défini par ses indexbeginetend. -
text: Contenu textuel de la cellule provenant du document d'entrée et sans contenu de balisage associé. -
row_index_begin: Indexbeginde l'emplacementrowde cette cellule dans la table en cours. -
row_index_end: Indexendde l'emplacementrowde cette cellule dans la table en cours. -
column_index_begin: Indexbeginde l'emplacementcolumnde cette cellule dans la table en cours. -
column_index_end: Indexendde l'emplacementcolumnde cette cellule dans la table en cours. -
row_header_ids: Un tableau de valeurs, où chaque valeur est la valeur de l'ID de la cellule d'un en-tête de ligne associé à cette cellule du corps. -
row_header_texts: matrice de valeurs, où chaque valeur est le texte d'un en-tête de ligne pour cette cellule de corps. -
row_header_texts_normalized: matrice de valeurs, où chaque valeur est le texte normalisé d'un en-tête de ligne pour cette cellule de corps. -
column_header_ids: Un tableau de valeurs, où chaque valeur est la valeur de l'ID de la cellule d'un en-tête de colonne associé à cette cellule du corps. -
column_header_texts: un tableau de valeurs, où chaque valeur est le texte d'un en-tête de colonne pour cette cellule de corps. -
column_header_texts_normalized: matrice de valeurs, où chaque valeur est le texte normalisé d'un en-tête de colonne pour cette cellule de corps. -
attributes: matrice identifiant des attributs de document. Chaque objet de la matrice se compose de trois éléments :type: type d'attribut. Les valeurs possibles sontAddress,Currency,DateTime,Duration,Location,Number,Organization,PercentageetPerson.text: texte associé à l'attribut.location: emplacement de l'attribut tel que défini par ses indexbeginetend.
-
-
key_value_pairs: matrice qui spécifie toutes les paires clé-valeur dans les tables du document d'entrée. Pour plus d'informations, voir Compréhension des paires clé-valeur.-
key: Objet qui spécifie une clé pour une paire clé-valeur.cell_id: ID unique de la clé dans la table.location: Emplacement de la cellule de clé dans le document d'entrée tel que défini par ses indexbeginetend.text: Contenu textuel de la cellule de la table sans balises HTML.
-
value: Matrice indiquant la ou les valeurs d'une paire clé-valeur.cell_id: ID unique de la valeur dans la table.location: Emplacement de la cellule de valeur dans le document d'entrée, tel que défini par ses indexbeginetend.text: Contenu textuel de la cellule de la table sans balises HTML.
-
-
contexts: Liste des documents connexes qui précèdent et suivent la table, sauf son titre de section, qui est fourni dans la zonesection_title. Les documents connexes comprennent les phrases connexes, les notes de bas de page et les phrases provenant d'autres parties du document qui font référence à la table. La liste est représentée sous forme de matrice. Chaque objet de la matrice est constitué des éléments suivants :text: Contenu textuel d'un document connexe provenant du document d'entrée, sans marquage HTML.location: Emplacement du document connexe dans le document d'entrée, tel que défini par ses indexbeginetend.
-
Remarques sur le schéma de sortie de table
- Les valeurs d'index de ligne et de colonne sont à base zéro, de sorte qu'elles commencent à
0. - Plusieurs valeurs des matrices d'éléments
row_header_idsetrow_header_textsindiquent une hiérarchie possible des en-têtes de ligne. - Plusieurs valeurs des matrices d'éléments
column_header_idsetcolumn_header_textsindiquent une hiérarchie possible des en-têtes de colonne.
Exemples
Le tableau suivant est un exemple de tableau provenant d'un document d'entrée.
{: caption="
Le tableau est composé comme suit :
La syntaxe suivante est utilisée dans le tableau:
- Un texte en gras indique un en-tête de colonne
- Le texte en italique indique un en-tête de ligne
- Un texte sans style indique une cellule du corps du texte
La sortie du service représente la première cellule du corps de l'exemple (c'est-à-dire la première cellule de la ligne 3 avec une valeur de 35.0% ) comme suit :
{
"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": [ ]
}
Description des paires clé-valeur
Les tableaux contiennent parfois des paires clé-valeur qui s'étendent sur plusieurs cellules du tableau. Table Understanding peut détecter les types de paires de tableaux suivants.
-
Paires de clés et de valeurs simples dans des cellules adjacentes, comme dans l'exemple de tableau suivant :
Table de base Clé Valeur Numéro d'article 123456789Date : 1/1/2019Quantité $1,000 -
Paires clé-valeur dans la même cellule, comme dans l'exemple de tableau suivant :
Table complexe Paires clé-valeur Paires clé-valeur Numéro d'article : 123456789Montant : $1000Date : 1/1/2019Adresse : 123 Anywhere Dr