pd3f-core
Experimentell, mit Vorsicht verwenden.
pd3f-core
ist ein Python-Paket zur Rekonstruktion des ursprünglichen Fließtextes aus PDFs mit Sprachmodellen. pd3f-core
geht davon aus, dass Ihr PDF entweder textbasiert oder bereits OCR-fähig ist. pd3f-core
ist das Herzstück von pd3f: eine vollständige Docker-basierte Textextraktionspipeline (einschließlich OCR).
pd3f-core
verwendet zunächst Parsr, um PDFs in Zeilen und Absätze zu unterteilen. Anschließend wird das Python-Paket dehyphen verwendet, um die Absätze auf die wahrscheinlichste Weise zu rekonstruieren. Die Wahrscheinlichkeit wird durch Berechnung der Perplexität mit den zeichenbasierten Sprachmodellen von Flair abgeleitet. Unnötige Bindestriche werden entfernt, Leerzeichen oder neue Zeilen werden beibehalten oder je nach umgebenden Wörtern weggelassen.
Es ist hauptsächlich für Deutsch entwickelt, sollte aber auch mit anderen Sprachen funktionieren. Das Projekt befindet sich noch in einem frühen Stadium. Erwarten Sie Ecken und Kanten und schnelle Veränderungen.
API-Dokumentation von pd3f-core: https://pd3f.github.io/pd3f-core/index.html
Dokumentation von pd3f (dem): https://pd3f.com/docs/
Überprüfen Sie, ob zwei Zeilen durch Entfernen von Bindestrichen ('-') verbunden werden können.
Entscheiden Sie, ob Sie beim Verbinden von Zeilen ein einfaches Leerzeichen (' ') oder eine neue Zeile ('n') hinzufügen möchten.
Prüfen Sie, ob der letzte Absatz einer Seite und der erste Absatz der Folgeseite zusammengefügt werden können.
Um Absätze zu verbinden (und Seitenumbrüche umzukehren), erkennen Sie Fußnoten und wandeln Sie sie in Endnoten um. Die Fußnoten werden zunächst an das Ende einer Datei verschoben.
Wenn die Kopf- oder Fußzeile für alle Seiten gleich ist, zeigen Sie sie nur einmal an. Kopfzeilen werden an den Anfang des Dokuments und Fußzeilen an das Ende gezogen. Es werden einige Heuristiken verwendet, die auf der Ähnlichkeit von Fußzeilen basieren. (Jaccard-Abstand für Text und Vergleich überlappender Formen)
pip install pd3f
oder
poetry add pd3f
Starten Sie eine lokale Parsr-Instanz:
docker-compose up
(Sie können auch eine Remote-Parsr-Instanz (Skript) tunneln oder eine Remote-Adresse auswählen.)
from pd3f import extract
text , tables = extract ( file_path , tables = False , experimental = False , force_gpu = False , lang = "multi" , fast = False , parsr_location = "localhost:3001" )
Erläuterungen zu den Parametern in den Dokumenten: https://pd3f.github.io/pd3f-core/export.html#pd3f.export.extract
Der Einsatz von CUDA beschleunigt die Auswertung mit Flair. Sie benötigen jedoch eine (teure) GPU. Sie müssen Ihre GPU mit CUDA einrichten. Hier eine Anleitung für Ubuntu 18.04
conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
(Beispiel)pd3f-core
mit Poesie: poetry add pd3f
Poetry erkennt, dass es in einer virtuellen Conda-Umgebung ausgeführt wird, sodass keine neue erstellt wird. Da die Einrichtung von CUDA schwierig ist, installieren Sie es auf die einfachste Weise (mit Conda).
Das Herzstück von pd3f-core
ist die JSON-Ausgabe von Parsr. Einige Kommentare dazu, wie und warum bestimmte Dinge ausgewählt wurden. Parsrs Dokumentation zu den verschiedenen Modulen
Parsr verfügt über mehrere Module zur Klassifizierung von Absätzen in bestimmte Typen. Sie bieten eine Listenerkennung sowie eine Überschriftenerkennung. Meiner Erfahrung nach ist die Genauigkeit für beide zu gering, sodass wir sie derzeit nicht verwenden. Dies bedeutet auch, dass der gesamte extrahierte (Ausgabe-)Text flach ist (keine Überschriften, unterschiedliche Formatierungen usw.).
Wir aktivieren die Zeichnungs- und Bilderkennung, weil wir möglicherweise verstehen müssen, welcher Absatz auf welchen anderen folgt. Dies kann hilfreich sein, wenn Sie entscheiden, ob Absätze verbunden werden sollen. Beim Aktivieren der fast
wird es jedoch gelöscht.
In der JSON-Ausgabe gibt es ein Feld pageNumber
. Dies kommt vom Seitenerkennungsmodul. pageNumber
wird also aus der Kopf-/Fußzeile jeder Seite abgeleitet. Daher kann es vom Index im Seitenarray abweichen. Geben Sie pageNumber
in der JSON-Ausgabe nicht weiter.
words-to-line-new
wurde so verwendet. Es liegt kein Fehler vor, aber die Genauigkeit nimmt ab, wenn es anders verwendet wird.
" words-to-line-new " ,
[
" reading-order-detection " ,
Führen Sie keine OCR mit Parsr durch, da die Ergebnisse schlechter sind als bei OCRmyPDF (da letzteres eine Bildvorverarbeitung verwendet).
Installieren und verwenden Sie Poesie.
Affero General Public License 3.0