Tabellen verstehen
Wenden Sie die Aufbereitung Table Understanding an, um detaillierte Informationen zu Tabellen und tabellenbezogenen Daten in Dokumenten abzurufen.
Die folgenden Tasks generieren ein HTML-Feld mit Tabelleninformationen und wenden die Aufbereitung 'Table Understanding' für Ihre Sammlung automatisch an:
-
Wenn Sie mit dem Smart Document Understanding-Tool ein vom Benutzer trainiertes oder vorab trainiertes SDU-Modell definieren, wird die Aufbereitung
Table Understandingauf das Feldhtmlangewendet, das für die Objektgruppe generiert wird. -
Wenn Sie einen Projekttyp Dokumentabruf für Verträge erstellen, wird automatisch ein vorab trainiertes SDU-Modell auf Ihre Sammlung angewendet. Daher wird die Aufbereitung
Table Understandingauf das Feldhtmlangewendet, das für die Objektgruppe generiert wird.Weitere Informationen finden Sie unter Smart Document Understanding.
Vorbereitende Schritte
Die Dokumente in Ihrer Sammlung müssen ein Feld mit HTML-Darstellungen Ihrer Tabellen enthalten. Diese Informationen werden häufig im Feld html gespeichert. Wenn Ihre Sammlung aus CSV-oder JSON-Dateien besteht, enthält sie möglicherweise
ein anderes Feld als das Feld html, das Tabelleninformationen im HTML-Format enthält.
Anwenden der Tabellenverständigung
Sie können die Aufbereitung nur auf ein Feld anwenden, das eine HTML-Darstellung der Tabelle enthält.
Um die Anreicherung anzuwenden, führen Sie die folgenden Schritte aus:
-
Öffnen Sie im Navigationsfenster die Seite Sammlungen verwalten und klicken Sie anschließend auf eine Sammlung, um sie zu öffnen.
-
Klicken Sie auf die Registerkarte Aufbereitungen.
-
Suchen Sie die Aufbereitung Table Understanding.
-
Wählen Sie das Feld
htmlaus der Feldliste aus.Wählen Sie das Feld aus, das HTML-Darstellungen der Tabellen enthält.
Nachdem die Aufbereitung angewendet wurde, können Sie gültige Ergebnisse erhalten, wenn Sie Abfragen übergeben, für die Discovery erforderlich ist, um in Tabellen gespeicherte Informationen zu finden.
Ein Entwickler kann Tabellen mithilfe der API abfragen. Weitere Informationen finden Sie unter Abfrageparameter.
Weitere Informationen zum Anwenden der Tabellenverständigung mithilfe der API finden Sie unter Aufbereitungen mithilfe der API anwenden.
Mit Tabellendaten in Python arbeiten
Verwenden Sie Text Extensions for Pandas, eine Open-Source-Bibliothek von IBM, um die Tabellen, die aus Dokumenten in Discovery geparst wurden, in Pandas- DataFrame-Objekte zu lesen. Ein Pandas- DataFrame ist ein Objekt, das zweidimensionale Tabellendaten in einem Format darstellt, das für die nachgeordnete Analyse in Pythontransformiert und bearbeitet werden kann.
Sie können beispielsweise Inhalte aus Tabellen in vielen Jahresberichtsdokumenten extrahieren und in einer einzigen Tabelle rekonstruieren, die mehrere Jahre relevante Datenpunkte enthält. Weitere Informationen finden Sie im Blogbeitrag Structured Information Extraction from Tables in PDF Documents with Pandas and IBM Watson unter Medium.com.
Ausgabeschema
Das Ausgabeschema der Aufbereitung Table Understanding sieht wie folgt aus.
{
"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
}
},
...
]
}
]
}
Schemaanordnung
Das Schema ist wie folgt angeordnet.
-
tables: Ein Array, das die Tabellen definiert, die im Eingabedokument identifiziert werden.-
location: Die Position der aktuellen Tabelle, wie durch die Indizesbeginundendim Eingabedokument definiert. -
text: Der textuelle Inhalt der aktuellen Tabelle aus dem Eingabedokument ohne zugeordneten Markup-Inhalt. -
section_title: Wenn ermittelt, die Position eines Abschnittstitels, der in der aktuellen Tabelle enthalten ist. Leer, wenn kein Abschnittstitel ermittelt wurde.text: Der Text für den angegebenen Abschnittstitel.location: Die Position des Abschnittstitels im Eingabedokument, wie durch die Indizesbeginundenddefiniert.
-
title: Bei Angabe der Titel oder Überschrift der aktuellen Tabelle im FormatTable x.: .... Leer, wenn kein Titel angegeben ist. Wenn vorhanden, isttitlevon dercontexts-Reihe derselben Tabelle ausgeschlossen.location: Die Position des Titels im Eingabedokument, wie durch die Indizesbeginundenddefiniert.text: Der Text für den angegebenen Tabellentitel oder die angegebene Tabellenüberschrift.
-
table_headers: Ein Array von Zellen auf Tabellenebene, die als Überschriften auf alle anderen Zellen der aktuellen Tabelle angewendet werden können. Jede Tabellenüberschrift ist als Sammlung der folgenden Elemente definiert:cell_id: Die eindeutige ID der Zelle in der aktuellen Tabelle.location: Die Position der Zelle im Eingabedokument, wie durch die Indizesbeginundenddefiniert.text: Der textuelle Inhalt der Zelle aus dem Eingabedokument ohne zugeordneten Markup-Inhalt.row_index_begin: Der Indexbeginder Position vonrowder Zelle in der aktuellen Tabelle.row_index_end: Der Indexendder Position vonrowder Zelle in der aktuellen Tabelle.column_index_begin: Der Indexbeginder Position voncolumnder Zelle in der aktuellen Tabelle.column_index_end: Der Indexendder Position voncolumnder Zelle in der aktuellen Tabelle.
-
column_headers: Ein Array von Zellen auf Spaltenebene, wobei jede dieser Zellen als Überschrift für andere Zellen in derselben Spalte der aktuellen Tabelle angewendet werden kann. Jede Spaltenüberschrift ist als Sammlung der folgenden Elemente definiert:cell_id: Die eindeutige ID der Zelle in der aktuellen Tabelle.location: Die Position der Zelle im Eingabedokument, wie durch die Indizesbeginundenddefiniert.text: Der textuelle Inhalt der Zelle aus dem Eingabedokument ohne zugeordneten Markup-Inhalt.text_normalized: Normalisierter Spaltenüberschriftstext.row_index_begin: Der Indexbeginder Position vonrowder Zelle in der aktuellen Tabelle.row_index_end: Der Indexendder Position vonrowder Zelle in der aktuellen Tabelle.column_index_begin: Der Indexbeginder Position voncolumnder Zelle in der aktuellen Tabelle.column_index_end: Der Indexendder Position voncolumnder Zelle in der aktuellen Tabelle.
-
row_headers: Ein Array von Zellen auf Zeilenebene, wobei jede dieser Zellen als Überschrift für andere Zellen in derselben Zeile der aktuellen Tabelle angewendet werden kann. Jede Zeilenüberschrift ist als Sammlung der folgenden Elemente definiert:cell_id: Die eindeutige ID der Zelle in der aktuellen Tabelle.location: Die Position der Zelle im Eingabedokument, wie durch die Indizesbeginundenddefiniert.text: Der textuelle Inhalt der Zelle aus dem Eingabedokument ohne zugeordneten Markup-Inhalt.text_normalized: Normalisierter Zeilenüberschriftstext.row_index_begin: Der Indexbeginder Position vonrowder Zelle in der aktuellen Tabelle.row_index_end: Der Indexendder Position vonrowder Zelle in der aktuellen Tabelle.column_index_begin: Der Indexbeginder Position voncolumnder Zelle in der aktuellen Tabelle.column_index_end: Der Indexendder Position voncolumnder Zelle in der aktuellen Tabelle.
-
body_cells: Ein Array von Zellen der aktuellen Tabelle, die weder Zellen für Tabellenüberschriften noch Zellen für Spalten- oder Zeilenüberschriften sind, mit entsprechenden Zuordnungen für die Zeilen- und Spaltenüberschriften. Jede Textzelle ist als Sammlung der folgenden Elemente definiert:-
cell_id: Die eindeutige ID der Zelle in der aktuellen Tabelle. -
location: Die Position der Zelle im Eingabedokument, wie durch die Indizesbeginundenddefiniert. -
text: Der textuelle Inhalt der Zelle aus dem Eingabedokument ohne zugeordneten Markup-Inhalt. -
row_index_begin: Der Indexbeginder Position vonrowder Zelle in der aktuellen Tabelle. -
row_index_end: Der Indexendder Position vonrowder Zelle in der aktuellen Tabelle. -
column_index_begin: Der Indexbeginder Position voncolumnder Zelle in der aktuellen Tabelle. -
column_index_end: Der Indexendder Position voncolumnder Zelle in der aktuellen Tabelle. -
row_header_ids: Eine Reihe von Werten, wobei jeder Wert der Zellen-ID-Wert einer Zeilenüberschrift ist, die mit dieser Körperzelle verknüpft ist. -
row_header_texts: Ein Array von Werten, wobei jeder Wert der Text aus einer Zeilenüberschrift für diese Hauptteilzelle ist. -
row_header_texts_normalized: Ein Array von Werten, wobei jeder Wert der normalisierte Text aus einer Zeilenüberschrift für diese Hauptteilzelle ist. -
column_header_ids: Eine Reihe von Werten, wobei jeder Wert der Zellen-ID-Wert einer Spaltenüberschrift ist, die mit dieser Körperzelle verknüpft ist. -
column_header_texts: Ein Array von Werten, wobei jeder Wert der Text aus einer Spaltenüberschrift für diese Hauptteilzelle ist. -
column_header_texts_normalized: Ein Array von Werten, wobei jeder Wert der normalisierte Text aus einer Spaltenüberschrift für diese Hauptteilzelle ist. -
attributes: Ein Array, das Dokumentattribute angibt. Jedes Objekt in dem Array besteht aus drei Elementen:type: Der Typ von Attribut. Zu den gültigen Werten gehörenAddress,Currency,DateTime,Duration,Location,Number,Organization,PercentageundPerson.text: Der Text, der dem Attribut zugeordnet ist.location: Die Position des Attributs, wie durch die Indizesbeginundenddefiniert.
-
-
key_value_pairs: Ein Array, das alle Schlüssel-Wert-Paare in Tabellen im Eingabedokument angibt. Weitere Informationen finden Sie in Informationen zu Schlüssel-Wert-Paaren.-
key: Ein Objekt, das einen Schlüssel für ein Schlüssel-Wert-Paar angibt.cell_id: Die eindeutige ID des Schlüssels in der Tabelle.location: Die Position der Schlüsselzelle im Eingabedokument, wie durch die Indizesbeginundenddefiniert.text: Der Textinhalt der Tabellenzelle ohne HTML-Markup.
-
value: Ein Array, das den oder die Werte für ein Schlüssel-Wert-Paar angibt.cell_id: Die eindeutige ID des Werts in der Tabelle.location: Die Position der Wertzelle im Eingabedokument, wie durch die Indizesbeginundenddefiniert.text: Der Textinhalt der Tabellenzelle ohne HTML-Markup.
-
-
contexts: Eine Liste von zusammengehörigem Material, das der Tabelle vorangeht oder ihr folgt, wobei der Abschnittstitel nicht enthalten ist, welcher im Feldsection_titleangegeben ist. Zusammengehöriges Material schließt zusammengehörige Sätze, Fußnoten sowie Sätze aus anderen Bereichen des Dokuments ein, die sich auf die Tabelle beziehen. Die Liste wird als Array dargestellt. Jedes Objekt im Array besteht aus den folgenden Elementen:text: Der Textinhalt von zusammengehörigem Material aus dem Eingabedokument ohne HTML-Markup.location: Die Position des zusammengehörigen Materials im Eingabedokument, wie durch die Indizesbeginundenddefiniert.
-
Hinweise zum Tabellenausgabeschema
- Zeilen- und Spaltenindexwerte pro Zelle sind auf null gesetzt und beginnen daher mit
0. - Mehrere Werte in Arrays der Elemente
row_header_idsundrow_header_textszeigen eine mögliche Hierarchie von Zeilenüberschriften an. - Mehrere Werte in Arrays der Elemente
column_header_idsundcolumn_header_textszeigen eine mögliche Hierarchie von Spaltenüberschriften an.
Beispiele
Die folgende Tabelle ist eine Beispieltabelle aus einem Eingabedokument.
Die Tabelle setzt sich wie folgt zusammen:
Die folgende Syntax wird in der Tabelle verwendet:
- Text in Fettdruck zeigt eine Spaltenüberschrift an.
- Kursiv gedruckter Text kennzeichnet eine Zeilenüberschrift
- Nicht hervorgehobener Text zeigt eine Textzelle an.
Die Ausgabe des Dienstes stellt die erste Körperzelle des Beispiels dar (d. h. die erste Zelle in Zeile 3 mit dem Wert 35.0% ) wie folgt:
{
"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": [ ]
}
Schlüssel/Wert-Paare verstehen
Tabellen enthalten manchmal Schlüssel-Wert-Paare, die sich über mehrere Tabellenzellen erstrecken. Tabelle "Verstehen" kann die folgenden Arten von Tabellenpaaren erkennen.
-
Einfache Schlüssel-Wert-Paare in benachbarten Zellen, wie in der folgenden Beispieltabelle:
Basistabelle Schlüssel Wert Artikelnummer 123456789Datum 1/1/2019Summe $1,000 -
Schlüssel-Wert-Paare in derselben Zelle, wie in der folgenden Beispieltabelle:
Komplexe Tabelle Schlüssel/Wert-Paare Schlüssel/Wert-Paare Artikelnummer: 123456789Betrag: $1000Datum: 1/1/2019Anschrift: 123 Anywhere Dr