Dieses Plugin lässt sich in Docling integrieren, um eine strukturierte Verarbeitung von PDFs , Word-Dokumenten und anderen Eingabeformaten in Ihre spaCy-Pipeline zu integrieren. Es gibt saubere, strukturierte Daten in einem textbasierten Format aus und erstellt die bekannten Doc
-Objekte von spaCy, mit denen Sie auf beschriftete Textbereiche wie Abschnitte oder Überschriften sowie Tabellen zugreifen können, deren Daten in einen pandas.DataFrame
konvertiert werden.
Dieser Workflow erleichtert die Anwendung leistungsstarker NLP-Techniken auf Ihre Dokumente, einschließlich sprachlicher Analyse, Erkennung benannter Entitäten, Textklassifizierung und mehr. Es eignet sich auch hervorragend für die Implementierung von Chunking für RAG- Pipelines.
️ Dieses Paket erfordert Python 3.10 oder höher.
pip install spacy-layout
Nachdem Sie den spaCyLayout
-Präprozessor mit einem nlp
Objekt zur Tokenisierung initialisiert haben, können Sie ihn in einem Dokumentpfad aufrufen, um ihn in strukturierte Daten zu konvertieren. Das resultierende Doc
Objekt enthält Layoutbereiche, die dem ursprünglichen Rohtext zugeordnet werden und verschiedene Attribute offenlegen, einschließlich des Inhaltstyps und der Layoutfunktionen.
import spacy
from spacy_layout import spaCyLayout
nlp = spacy . blank ( "en" )
layout = spaCyLayout ( nlp )
# Process a document and create a spaCy Doc object
doc = layout ( "./starcraft.pdf" )
# The text-based contents of the document
print ( doc . text )
# Document layout including pages and page sizes
print ( doc . _ . layout )
# Tables in the document and their extracted data
print ( doc . _ . tables )
# Layout spans for different sections
for span in doc . spans [ "layout" ]:
# Document section and token and character offsets into the text
print ( span . text , span . start , span . end , span . start_char , span . end_char )
# Section type, e.g. "text", "title", "section_header" etc.
print ( span . label_ )
# Layout features of the section, including bounding box
print ( span . _ . layout )
# Closest heading to the span (accuracy depends on document structure)
print ( span . _ . heading )
Wenn Sie größere Mengen an Dokumenten im großen Maßstab verarbeiten müssen, können Sie die Methode spaCyLayout.pipe
verwenden, die stattdessen eine Iterable von Pfaden oder Bytes verwendet und Doc
Objekte liefert:
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
for doc in layout . pipe ( paths ):
print ( doc . _ . layout )
Nachdem Sie die Dokumente verarbeitet haben, können Sie die strukturierten Doc
Objekte im effizienten Binärformat von spaCy serialisieren, sodass Sie die ressourcenintensive Konvertierung nicht erneut ausführen müssen.
Mit spaCy können Sie außerdem das nlp
Objekt für ein bereits erstelltes Doc
aufrufen, sodass Sie problemlos eine Pipeline von Komponenten für die linguistische Analyse oder die Erkennung benannter Entitäten anwenden, regelbasierten Abgleich verwenden oder alles andere tun können, was mit spaCy möglich ist.
# Load the transformer-based English pipeline
# Installation: python -m spacy download en_core_web_trf
nlp = spacy . load ( "en_core_web_trf" )
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
# Apply the pipeline to access POS tags, dependencies, entities etc.
doc = nlp ( doc )
Tabellen werden in den Layoutbereichen mit der Bezeichnung "table"
und unter der Verknüpfung Doc._.tables
eingebunden. Sie stellen ein layout
Erweiterungsattribut sowie ein Attribut data
bereit, das die in einen pandas.DataFrame
konvertierten Tabellendaten enthält.
for table in doc . _ . tables :
# Token position and bounding box
print ( table . start , table . end , table . _ . layout )
# pandas.DataFrame of contents
print ( table . _ . data )
Standardmäßig ist der Span-Text ein Platzhalter TABLE
, aber Sie können anpassen, wie eine Tabelle gerendert wird, indem Sie einen display_table
-Rückruf an spaCyLayout
bereitstellen, der den pandas.DataFrame
der Daten empfängt. Dadurch können Sie die Tabellenabbildungen in den Dokumenttext einbinden und später verwenden, z. B. bei der Informationsextraktion mit einem trainierten Named-Entity-Erkenner oder Textklassifikator.
def display_table ( df : pd . DataFrame ) -> str :
return f"Table with columns: { ', ' . join ( df . columns . tolist ()) } "
layout = spaCyLayout ( nlp , display_table = display_table )
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
print ( doc . _ . layout )
for span in doc . spans [ "layout" ]:
print ( span . label_ , span . _ . layout )
Attribut | Typ | Beschreibung |
---|---|---|
Doc._.layout | DocLayout | Layoutmerkmale des Dokuments. |
Doc._.pages | list[tuple[PageLayout, list[Span]]] | Seiten im Dokument und die darin enthaltenen Bereiche. |
Doc._.tables | list[Span] | Alle Tabellen im Dokument. |
Doc.spans["layout"] | spacy.tokens.SpanGroup | Das Layout erstreckt sich über das gesamte Dokument. |
Span.label_ | str | Der Typ des extrahierten Layoutbereichs, z. B. "text" oder "section_header" . Optionen finden Sie hier. |
Span.label | int | Die ganzzahlige ID des Span-Labels. |
Span.id | int | Laufender Index der Layoutspanne. |
Span._.layout | SpanLayout | None | Layoutmerkmale einer Layoutspanne. |
Span._.heading | Span | None | Der einer Spanne am nächsten liegende Kurs, falls verfügbar. |
Span._.data | pandas.DataFrame | None | Die extrahierten Daten für Tabellenbereiche. |
Attribut | Typ | Beschreibung |
---|---|---|
page_no | int | Die Seitenzahl (1-indiziert). |
width | float | Seite mit in Pixeln. |
height | float | Seitenhöhe in Pixel. |
Attribut | Typ | Beschreibung |
---|---|---|
pages | list[PageLayout] | Die Seiten im Dokument. |
Attribut | Typ | Beschreibung |
---|---|---|
x | float | Horizontaler Versatz des Begrenzungsrahmens in Pixel. |
y | float | Vertikaler Versatz des Begrenzungsrahmens in Pixel. |
width | float | Breite des Begrenzungsrahmens in Pixel. |
height | float | Höhe des Begrenzungsrahmens in Pixel. |
page_no | int | Anzahl der Seiten, auf denen sich der Span befindet. |
spaCyLayout
spaCyLayout.__init__
Initialisieren Sie den Dokumentenprozessor.
nlp = spacy . blank ( "en" )
layout = spaCyLayout ( nlp )
Argument | Typ | Beschreibung |
---|---|---|
nlp | spacy.language.Language | Das initialisierte nlp Objekt, das für die Tokenisierung verwendet werden soll. |
separator | str | Token, der zum Trennen von Abschnitten im erstellten Doc Objekt verwendet wird. Das Trennzeichen ist nicht Teil der Layoutspanne. Bei None wird kein Trennzeichen hinzugefügt. Standardmäßig ist "nn" . |
attrs | dict[str, str] | Überschreiben Sie die benutzerdefinierten spaCy-Attribute. Kann "doc_layout" , "doc_pages" , "doc_tables" , "span_layout" , "span_data" , "span_heading" und "span_group" enthalten. |
headings | list[str] | Beschriftungen von Überschriften, die für Span._.heading Erkennung berücksichtigt werden sollen. Standardmäßig ist ["section_header", "page_header", "title"] . |
display_table | Callable[[pandas.DataFrame], str] | str | Funktion zur Generierung der textbasierten Darstellung der Tabelle im Doc.text oder Platzhaltertext. Standardmäßig ist "TABLE" . |
docling_options | dict[InputFormat, FormatOption] | Formatoptionen, die an Doclings DocumentConverter übergeben werden. |
RÜCKGABEN | spaCyLayout | Das initialisierte Objekt. |
spaCyLayout.__call__
Verarbeiten Sie ein Dokument und erstellen Sie ein spaCy Doc
Objekt, das den Textinhalt und die Layoutbereiche enthält, die standardmäßig über Doc.spans["layout"]
verfügbar sind.
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
Argument | Typ | Beschreibung |
---|---|---|
source | str | Path | bytes | Pfad des zu verarbeitenden Dokuments oder Bytes. |
RÜCKGABEN | Doc | Das verarbeitete spaCy Doc Objekt. |
spaCyLayout.pipe
Verarbeiten Sie mehrere Dokumente und erstellen Sie spaCy Doc
Objekte. Sie sollten diese Methode verwenden, wenn Sie größere Dokumentenmengen in großem Maßstab verarbeiten.
layout = spaCyLayout ( nlp )
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
docs = layout . pipe ( paths )
Argument | Typ | Beschreibung |
---|---|---|
sources | Iterable[str | Path | bytes] | Pfade der zu verarbeitenden Dokumente oder Bytes. |
ERGEBNISSE | Doc | Das verarbeitete spaCy Doc Objekt. |