Plugin ini terintegrasi dengan Docling untuk menghadirkan pemrosesan terstruktur PDF , dokumen Word , dan format masukan lainnya ke saluran spaCy Anda. Ini menghasilkan data yang bersih dan terstruktur dalam format berbasis teks dan membuat objek Doc
akrab spaCy yang memungkinkan Anda mengakses rentang teks berlabel seperti bagian atau judul, dan tabel dengan datanya dikonversi ke pandas.DataFrame
.
Alur kerja ini memudahkan penerapan teknik NLP yang canggih pada dokumen Anda, termasuk analisis linguistik, pengenalan entitas bernama, klasifikasi teks, dan banyak lagi. Ini juga bagus untuk mengimplementasikan chunking pada pipeline RAG .
️ Paket ini memerlukan Python 3.10 atau lebih tinggi.
pip install spacy-layout
Setelah menginisialisasi praprosesor spaCyLayout
dengan objek nlp
untuk tokenisasi, Anda dapat memanggilnya di jalur dokumen untuk mengonversinya menjadi data terstruktur. Objek Doc
yang dihasilkan mencakup rentang tata letak yang dipetakan ke dalam teks mentah asli dan mengekspos berbagai atribut, termasuk tipe konten dan fitur tata letak.
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 )
Jika Anda perlu memproses dokumen dalam jumlah besar dalam skala besar, Anda dapat menggunakan metode spaCyLayout.pipe
, yang menggunakan jalur atau byte yang dapat diubah dan menghasilkan objek Doc
:
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
for doc in layout . pipe ( paths ):
print ( doc . _ . layout )
Setelah Anda memproses dokumen, Anda dapat membuat serial objek Doc
terstruktur dalam format biner spaCy yang efisien, sehingga Anda tidak perlu menjalankan kembali konversi yang menghabiskan banyak sumber daya.
spaCy juga memungkinkan Anda memanggil objek nlp
pada Doc
yang sudah dibuat, sehingga Anda dapat dengan mudah menerapkan alur komponen untuk analisis linguistik atau pengenalan entitas bernama, menggunakan pencocokan berbasis aturan, atau apa pun yang dapat Anda lakukan dengan spaCy.
# 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 )
Tabel disertakan dalam bentang tata letak dengan label "table"
dan di bawah pintasan Doc._.tables
. Mereka mengekspos atribut ekstensi layout
, serta atribut data
, yang mencakup data tabular yang dikonversi ke pandas.DataFrame
.
for table in doc . _ . tables :
# Token position and bounding box
print ( table . start , table . end , table . _ . layout )
# pandas.DataFrame of contents
print ( table . _ . data )
Secara default, teks span adalah placeholder TABLE
, namun Anda dapat menyesuaikan cara tabel dirender dengan memberikan callback display_table
ke spaCyLayout
, yang menerima pandas.DataFrame
dari data tersebut. Hal ini memungkinkan Anda untuk menyertakan gambar tabel dalam teks dokumen dan menggunakannya nanti, misalnya selama ekstraksi informasi dengan pengenal entitas bernama atau pengklasifikasi teks yang terlatih.
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 )
Atribut | Jenis | Keterangan |
---|---|---|
Doc._.layout | DocLayout | Fitur tata letak dokumen. |
Doc._.pages | list[tuple[PageLayout, list[Span]]] | Halaman dalam dokumen dan rentang yang dikandungnya. |
Doc._.tables | list[Span] | Semua tabel dalam dokumen. |
Doc.spans["layout"] | spacy.tokens.SpanGroup | Tata letaknya terbentang di dalam dokumen. |
Span.label_ | str | Jenis rentang tata letak yang diekstrak, misalnya "text" atau "section_header" . Lihat di sini untuk opsi. |
Span.label | int | ID bilangan bulat dari label rentang. |
Span.id | int | Menjalankan indeks rentang tata letak. |
Span._.layout | SpanLayout | None | Fitur tata letak rentang tata letak. |
Span._.heading | Span | None | Menuju terdekat ke suatu rentang, jika tersedia. |
Span._.data | pandas.DataFrame | None | Data yang diekstraksi untuk rentang tabel. |
Atribut | Jenis | Keterangan |
---|---|---|
page_no | int | Nomor halaman (terindeks 1). |
width | float | Halaman dalam piksel. |
height | float | Tinggi halaman dalam piksel. |
Atribut | Jenis | Keterangan |
---|---|---|
pages | list[PageLayout] | Halaman-halaman dalam dokumen. |
Atribut | Jenis | Keterangan |
---|---|---|
x | float | Offset horizontal kotak pembatas dalam piksel. |
y | float | Offset vertikal kotak pembatas dalam piksel. |
width | float | Lebar kotak pembatas dalam piksel. |
height | float | Tinggi kotak pembatas dalam piksel. |
page_no | int | Jumlah halaman tempat rentang berada. |
spaCyLayout
spaCyLayout.__init__
Inisialisasi pemroses dokumen.
nlp = spacy . blank ( "en" )
layout = spaCyLayout ( nlp )
Argumen | Jenis | Keterangan |
---|---|---|
nlp | spacy.language.Language | Objek nlp yang diinisialisasi untuk digunakan untuk tokenisasi. |
separator | str | Token digunakan untuk memisahkan bagian pada objek Doc yang dibuat. Pemisah tidak akan menjadi bagian dari rentang tata letak. Jika None , tidak ada pemisah yang akan ditambahkan. Defaultnya adalah "nn" . |
attrs | dict[str, str] | Ganti atribut spaCy khusus. Dapat menyertakan "doc_layout" , "doc_pages" , "doc_tables" , "span_layout" , "span_data" , "span_heading" dan "span_group" . |
headings | list[str] | Label judul yang perlu dipertimbangkan untuk deteksi Span._.heading . Defaultnya adalah ["section_header", "page_header", "title"] . |
display_table | Callable[[pandas.DataFrame], str] | str | Berfungsi untuk menghasilkan representasi tabel berbasis teks di Doc.text atau teks placeholder. Defaultnya adalah "TABLE" . |
docling_options | dict[InputFormat, FormatOption] | Opsi format diteruskan ke DocumentConverter Docling. |
PENGEMBALIAN | spaCyLayout | Objek yang diinisialisasi. |
spaCyLayout.__call__
Memproses dokumen dan membuat objek spaCy Doc
yang berisi konten teks dan rentang tata letak, tersedia melalui Doc.spans["layout"]
secara default.
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
Argumen | Jenis | Keterangan |
---|---|---|
source | str | Path | bytes | Jalur dokumen ke proses atau byte. |
PENGEMBALIAN | Doc | Objek spaCy Doc yang diproses. |
spaCyLayout.pipe
Memproses banyak dokumen dan membuat objek spaCy Doc
. Anda harus menggunakan metode ini jika Anda memproses dokumen dalam jumlah besar dalam skala besar.
layout = spaCyLayout ( nlp )
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
docs = layout . pipe ( paths )
Argumen | Jenis | Keterangan |
---|---|---|
sources | Iterable[str | Path | bytes] | Jalur dokumen untuk diproses atau byte. |
HASIL | Doc | Objek spaCy Doc yang diproses. |