ปลั๊กอินนี้ทำงานร่วมกับ Docling เพื่อนำการประมวลผลแบบมีโครงสร้างของ PDF , เอกสาร Word และรูปแบบอินพุตอื่นๆ มาสู่ไปป์ไลน์ spaCy ของคุณ โดยจะแสดงผล ข้อมูลที่สะอาดและมีโครงสร้าง ในรูปแบบข้อความ และสร้างออบเจ็กต์ Doc
ที่คุ้นเคยของ spaCy ซึ่งช่วยให้คุณเข้าถึงช่วงข้อความที่มีป้ายกำกับ เช่น ส่วนหรือส่วนหัว และตารางที่แปลงข้อมูลเป็น pandas.DataFrame
ขั้นตอนการทำงานนี้ทำให้ง่ายต่อการใช้ เทคนิค NLP อันทรงพลังกับเอกสารของคุณ รวมถึงการวิเคราะห์ทางภาษา การจดจำเอนทิตีที่มีชื่อ การจัดหมวดหมู่ข้อความ และอื่นๆ นอกจากนี้ยังยอดเยี่ยมสำหรับการนำ chunking ไปป์ไลน์ RAG ไป ใช้อีกด้วย
แพ็คเกจนี้ต้องใช้ Python 3.10 ขึ้นไป
pip install spacy-layout
หลังจากเตรียมใช้งานตัวประมวลผลล่วงหน้า spaCyLayout
ด้วยอ็อบเจ็กต์ nlp
สำหรับการทำโทเค็นแล้ว คุณสามารถเรียกใช้บนพาธเอกสารเพื่อแปลงเป็นข้อมูลที่มีโครงสร้างได้ ออบเจ็กต์ Doc
ที่เป็นผลลัพธ์จะมีช่วงเลย์เอาต์ที่แมปเข้ากับข้อความดิบต้นฉบับ และแสดงคุณลักษณะต่างๆ รวมถึงประเภทเนื้อหาและคุณลักษณะเลย์เอาต์
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 )
หากคุณต้องการประมวลผลเอกสารจำนวนมากขึ้นตามขนาด คุณสามารถใช้เมธอด spaCyLayout.pipe
ซึ่งใช้เส้นทางหรือไบต์ที่ทำซ้ำได้แทนและให้ผลลัพธ์อ็อบเจ็กต์ Doc
:
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
for doc in layout . pipe ( paths ):
print ( doc . _ . layout )
หลังจากที่คุณประมวลผลเอกสารแล้ว คุณสามารถทำให้ออบเจ็กต์ Doc
ที่มีโครงสร้างเป็นอนุกรมในรูปแบบไบนารีที่มีประสิทธิภาพของ spaCy ได้ ดังนั้นคุณจึงไม่ต้องดำเนินการแปลงที่ต้องใช้ทรัพยากรมากอีกครั้ง
spaCy ยังช่วยให้คุณสามารถเรียกใช้ออบเจ็กต์ nlp
บน Doc
ที่สร้างไว้แล้วได้ ดังนั้นคุณสามารถใช้ไปป์ไลน์ของส่วนประกอบสำหรับการวิเคราะห์ทางภาษาหรือการรับรู้เอนทิตีที่มีชื่อ ใช้การจับคู่ตามกฎ หรือสิ่งอื่นใดที่คุณสามารถทำได้กับ 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 )
ตารางจะรวมอยู่ในช่วงโครงร่างที่มีป้ายกำกับ "table"
และอยู่ใต้ทางลัด Doc._.tables
โดยเปิดเผยแอตทริบิวต์ส่วนขยาย layout
เช่นเดียวกับ data
แอตทริบิวต์ ซึ่งรวมถึงข้อมูลแบบตารางที่แปลงเป็น 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 )
ตามค่าเริ่มต้น ข้อความการขยายจะเป็นตัวยึดตำแหน่ง TABLE
แต่คุณสามารถปรับแต่งวิธีการแสดงผลตารางได้โดยจัดให้มีการเรียกกลับ display_table
ไปที่ spaCyLayout
ซึ่งรับ pandas.DataFrame
ของข้อมูล ซึ่งช่วยให้คุณสามารถรวมตัวเลขในตารางในข้อความในเอกสารและใช้ในภายหลังได้ เช่น ระหว่างการแยกข้อมูลด้วยตัวจดจำเอนทิตีที่มีชื่อหรือตัวแยกประเภทข้อความที่ได้รับการฝึกอบรม
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 )
คุณลักษณะ | พิมพ์ | คำอธิบาย |
---|---|---|
Doc._.layout | DocLayout | คุณสมบัติเค้าโครงของเอกสาร |
Doc._.pages | list[tuple[PageLayout, list[Span]]] | หน้าในเอกสารและช่วงที่มี |
Doc._.tables | list[Span] | ตารางทั้งหมดในเอกสาร |
Doc.spans["layout"] | spacy.tokens.SpanGroup | เค้าโครงครอบคลุมในเอกสาร |
Span.label_ | str | ประเภทของช่วงเค้าโครงที่แยกออกมา เช่น "text" หรือ "section_header" ดูที่นี่สำหรับตัวเลือก |
Span.label | int | ID จำนวนเต็มของป้ายกำกับ span |
Span.id | int | ดัชนีการรันของช่วงเค้าโครง |
Span._.layout | SpanLayout | None | คุณสมบัติโครงร่างของช่วงโครงร่าง |
Span._.heading | Span | None | มุ่งหน้าไปยังช่วงที่ใกล้เคียงที่สุด หากมี |
Span._.data | pandas.DataFrame | None | ข้อมูลที่แยกออกมาสำหรับช่วงตาราง |
คุณลักษณะ | พิมพ์ | คำอธิบาย |
---|---|---|
page_no | int | หมายเลขหน้า (ดัชนี 1) |
width | float | หน้าที่มีหน่วยเป็นพิกเซล |
height | float | ความสูงของหน้าเป็นพิกเซล |
คุณลักษณะ | พิมพ์ | คำอธิบาย |
---|---|---|
pages | list[PageLayout] | หน้าต่างๆ ในเอกสาร |
คุณลักษณะ | พิมพ์ | คำอธิบาย |
---|---|---|
x | float | ออฟเซ็ตแนวนอนของกรอบขอบเป็นพิกเซล |
y | float | ออฟเซ็ตแนวตั้งของกรอบขอบเป็นพิกเซล |
width | float | ความกว้างของกรอบขอบเป็นพิกเซล |
height | float | ความสูงของกรอบขอบเป็นพิกเซล |
page_no | int | จำนวนหน้าที่เปิดอยู่ |
spaCyLayout
spaCyLayout.__init__
เตรียมใช้งานตัวประมวลผลเอกสาร
nlp = spacy . blank ( "en" )
layout = spaCyLayout ( nlp )
การโต้แย้ง | พิมพ์ | คำอธิบาย |
---|---|---|
nlp | spacy.language.Language | ออบเจ็กต์ nlp ที่เตรียมใช้งานเพื่อใช้สำหรับโทเค็น |
separator | str | โทเค็นใช้เพื่อแยกส่วนต่างๆ ในวัตถุ Doc ที่สร้างขึ้น ตัวคั่นจะไม่เป็นส่วนหนึ่งของช่วงเค้าโครง ถ้า None จะไม่มีการเพิ่มตัวคั่น ค่าเริ่มต้นคือ "nn" |
attrs | dict[str, str] | ลบล้างแอตทริบิวต์ spaCy ที่กำหนดเอง สามารถรวม "doc_layout" , "doc_pages" , "doc_tables" , "span_layout" , "span_data" , "span_heading" และ "span_group" |
headings | list[str] | ป้ายกำกับของส่วนหัวที่ต้องพิจารณาสำหรับการตรวจหา Span._.heading ค่าเริ่มต้นเป็น ["section_header", "page_header", "title"] |
display_table | Callable[[pandas.DataFrame], str] | str | ฟังก์ชันเพื่อสร้างการแสดงตารางตามข้อความใน Doc.text หรือข้อความตัวยึดตำแหน่ง ค่าเริ่มต้นเป็น "TABLE" |
docling_options | dict[InputFormat, FormatOption] | ตัวเลือกรูปแบบที่ส่งผ่านไปยัง DocumentConverter ของ Docling |
การส่งคืน | spaCyLayout | วัตถุเริ่มต้น |
spaCyLayout.__call__
ประมวลผลเอกสารและสร้างออบเจ็กต์ spaCy Doc
ที่มีเนื้อหาข้อความและช่วงเลย์เอาต์ ซึ่งพร้อมใช้งานผ่าน Doc.spans["layout"]
ตามค่าเริ่มต้น
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
การโต้แย้ง | พิมพ์ | คำอธิบาย |
---|---|---|
source | str | Path | bytes | เส้นทางของเอกสารที่จะประมวลผลหรือไบต์ |
การส่งคืน | Doc | อ็อบเจ็กต์ spaCy Doc ที่ประมวลผลแล้ว |
spaCyLayout.pipe
ประมวลผลเอกสารหลายชุดและสร้างวัตถุ spaCy Doc
คุณควรใช้วิธีนี้หากคุณกำลังประมวลผลเอกสารจำนวนมากในวงกว้าง
layout = spaCyLayout ( nlp )
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
docs = layout . pipe ( paths )
การโต้แย้ง | พิมพ์ | คำอธิบาย |
---|---|---|
sources | Iterable[str | Path | bytes] | เส้นทางของเอกสารที่จะประมวลผลหรือไบต์ |
อัตราผลตอบแทน | Doc | อ็อบเจ็กต์ spaCy Doc ที่ประมวลผลแล้ว |