Tabled ist eine kleine Bibliothek zum Erkennen und Extrahieren von Tabellen. Es verwendet Surya, um alle Tabellen in einer PDF-Datei zu finden, die Zeilen/Spalten zu identifizieren und Zellen in Markdown, CSV oder HTML zu formatieren.
Merkmal | Bevölkerung | Wechsel von 2016 auf 2060 | ||||||
---|---|---|---|---|---|---|---|---|
2016 | 2020 | 2030 | 2040 | 2050 | 2060 | Nummer | Prozent | |
Gesamtbevölkerung | 323.1 | 332,6 | 355.1 | 373,5 | 388,9 | 404.5 | 81,4 | 25.2 |
Unter 18 Jahren | 73,6 | 74,0 | 75,7 | 77.1 | 78,2 | 80.1 | 6.5 | 8.8 |
18 bis 44 Jahre | 116,0 | 119.2 | 125,0 | 126,4 | 129,6 | 132,7 | 16.7 | 14.4 |
45 bis 64 Jahre | 84,3 | 83,4 | 81,3 | 89.1 | 95,4 | 97,0 | 12.7 | 15.1 |
65 Jahre und älter | 49.2 | 56.1 | 73.1 | 80,8 | 85,7 | 94,7 | 45.4 | 92,3 |
85 Jahre und älter | 6.4 | 6.7 | 9.1 | 14.4 | 18.6 | 19.0 | 12.6 | 198.1 |
100 Jahre und älter | 0,1 | 0,1 | 0,1 | 0,2 | 0,4 | 0,6 | 0,5 | 618.3 |
Im Discord besprechen wir die zukünftige Entwicklung.
Eine gehostete API für Tabled ist hier verfügbar:
Funktioniert mit PDF, Bildern, Word-Dokumenten und Powerpoints
Konstante Geschwindigkeit ohne Latenzspitzen
Hohe Zuverlässigkeit und Verfügbarkeit
Ich möchte, dass die bereitgestellten Informationen möglichst allgemein zugänglich sind und gleichzeitig meine Entwicklungs-/Schulungskosten finanzieren können. Recherche und private Nutzung sind immer in Ordnung, es gibt jedoch einige Einschränkungen bei der kommerziellen Nutzung.
Die Gewichtungen für die Modelle sind cc-by-nc-sa-4.0
lizenziert, aber ich verzichte darauf für jede Organisation mit einem Bruttoumsatz von weniger als 5 Mio. USD im letzten 12-Monats-Zeitraum UND einer lebenslangen VC/Angel-Finanzierung unter 5 Mio. USD erzogen. Sie dürfen auch nicht mit der Datalab-API konkurrieren. Wenn Sie die GPL-Lizenzanforderungen entfernen möchten (Doppellizenz) und/oder die Gewichte kommerziell über der Umsatzgrenze nutzen möchten, sehen Sie sich die Optionen hier an.
Sie benötigen Python 3.10+ und PyTorch. Möglicherweise müssen Sie zuerst die CPU-Version von Torch installieren, wenn Sie keinen Mac oder keine GPU-Maschine verwenden. Weitere Einzelheiten finden Sie hier.
Installieren mit:
pip install tabellarisch-pdf
Nach der Installation:
Überprüfen Sie die Einstellungen in tabled/settings.py
. Sie können alle Einstellungen mit Umgebungsvariablen überschreiben.
Ihr Taschenlampengerät wird automatisch erkannt, Sie können dies jedoch außer Kraft setzen. Beispiel: TORCH_DEVICE=cuda
.
Modellgewichte werden automatisch heruntergeladen, wenn Sie die Tabelle zum ersten Mal ausführen.
Tabelle DATA_PATH
DATA_PATH
kann ein Bild, ein PDF oder ein Ordner mit Bildern/PDFs sein
--format
gibt das Ausgabeformat für jede Tabelle an ( markdown
, html
oder csv
).
--save_json
speichert zusätzliche Zeilen- und Spalteninformationen in einer JSON-Datei
--save_debug_images
speichert Bilder, die die erkannten Zeilen und Spalten zeigen
--skip_detection
bedeutet, dass die von Ihnen übergebenen Bilder alle zugeschnittene Tabellen sind und keine Tabellenerkennung benötigen.
--detect_cell_boxes
Standardmäßig versucht Tabled, Zellinformationen aus dem PDF abzurufen. Wenn Sie stattdessen möchten, dass Zellen von einem Erkennungsmodell erkannt werden, geben Sie dies an (normalerweise ist dies nur bei PDFs erforderlich, die fehlerhaften eingebetteten Text enthalten).
--save_images
gibt an, dass Bilder erkannter Zeilen/Spalten und Zellen gespeichert werden sollen.
Nach der Ausführung des Skripts enthält das Ausgabeverzeichnis Ordner mit denselben Basisnamen wie die Eingabedateinamen. In diesen Ordnern befinden sich die Markdown-Dateien für jede Tabelle in den Quelldokumenten. Optional gibt es auch Bilder der Tische.
Außerdem befindet sich im Stammverzeichnis des Ausgabeverzeichnisses eine Datei results.json
. Die Datei enthält ein JSON-Wörterbuch, dessen Schlüssel die Eingabedateinamen ohne Erweiterungen sind. Jeder Wert ist eine Liste von Wörterbüchern, eines pro Tabelle im Dokument. Jedes Tabellenwörterbuch enthält:
cells
– der erkannte Text und die Begrenzungsrahmen für jede Tabellenzelle.
bbox
– bbox der Zelle innerhalb der Tabellen-bbox
text
– der Text der Zelle
row_ids
– IDs der Zeilen, zu denen die Zelle gehört
col_ids
– IDs der Spalten, zu denen die Zelle gehört
order
– Reihenfolge dieser Zelle innerhalb der ihr zugewiesenen Zeilen-/Spaltenzelle. (Sortieren nach Zeile, dann nach Spalte, dann nach Reihenfolge)
rows
– Bboxen der erkannten Zeilen
bbox
– Bbox der Zeile im Format (x1, x2, y1, y2).
row_id
– eindeutige ID der Zeile
cols
– Bboxen der erkannten Spalten
bbox
– Bbox der Spalte im Format (x1, x2, y1, y2).
col_id
– eindeutige ID der Spalte
image_bbox
– die Bbox für das Bild im Format (x1, y1, x2, y2). (x1, y1) ist die obere linke Ecke und (x2, y2) ist die untere rechte Ecke. Die Tabelle bbox ist relativ dazu.
bbox
– der Begrenzungsrahmen der Tabelle innerhalb der Bild-bbox.
pnum
– Seitenzahl innerhalb des Dokuments
tnum
– Tabellenindex auf der Seite
Ich habe eine Streamlit-App beigefügt, mit der Sie die Bearbeitung von Bildern oder PDF-Dateien interaktiv ausprobieren können. Führen Sie es aus mit:
pip install streamlit tabled_gui
from tabled.extract import extract_tablesfrom tabled.fileinput import Load_pdfs_imagesfrom Tabled.inference.models Import Load_detection_models, Load_recognition_modelsdet_models, Rec_models = Load_detection_models(), Load_recognition_models()images, Highres_images, Namen, Textzeilen = Load_pdfs_images(IN_PATH)page_results = extract_tables(images, highres_images, text_lines, det_models, rec_models)
Durchschnittliche Punktzahl | Zeit pro Tisch | Gesamttabellen |
---|---|---|
0,847 | 0,029 | 688 |
Es ist schwierig, gute Ground-Truth-Daten für Tabellen zu erhalten, da Sie entweder auf einfache Layouts beschränkt sind, die heuristisch analysiert und gerendert werden können, oder Sie müssen LLMs verwenden, die Fehler machen. Ich habe mich dafür entschieden, GPT-4-Tabellenvorhersagen als Pseudo-Grundwahrheit zu verwenden.
Tabled erhält im Vergleich zu GPT-4 einen Ausrichtungswert .847
, was die Ausrichtung zwischen dem Text in Tabellenzeilen/-zellen anzeigt. Einige der Fehlausrichtungen sind auf GPT-4-Fehler oder kleine Inkonsistenzen bei den von GPT-4 betrachteten Tabellenrändern zurückzuführen. Im Allgemeinen ist die Extraktionsqualität recht hoch.
Bei der Ausführung auf einem A10G mit 10 GB VRAM-Auslastung und einer Stapelgröße von 64
dauert die Tabelle .029
Sekunden pro Tabelle.
Führen Sie den Benchmark durch mit:
python benchmarks/benchmark.py out.json
Vielen Dank an Peter Jansen für den Benchmarking-Datensatz und für die Diskussion über die Tabellenanalyse.
Huggingface für Inferenzcode und Modell-Hosting
PyTorch für Training/Inferenz