يتكامل هذا البرنامج المساعد مع Docling لجلب المعالجة المنظمة لملفات PDF ومستندات Word وتنسيقات الإدخال الأخرى إلى خط أنابيب spaCy الخاص بك. يقوم بإخراج بيانات نظيفة ومنظمة بتنسيق يستند إلى نص وينشئ كائنات Doc
المألوفة لـ SpaCy والتي تتيح لك الوصول إلى امتدادات النص المسمى مثل الأقسام أو العناوين والجداول مع تحويل بياناتها إلى pandas.DataFrame
.
يسهّل سير العمل هذا تطبيق تقنيات البرمجة اللغوية العصبية القوية على مستنداتك، بما في ذلك التحليل اللغوي والتعرف على الكيانات المسماة وتصنيف النص والمزيد. كما أنه رائع لتنفيذ عملية القطع لخطوط أنابيب 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 | معرف العدد الصحيح للتسمية الممتدة. |
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 الذي تمت معالجته. |