trustgraph/docs/tech-specs/universal-decoder.ar.md

420 lines
27 KiB
Markdown
Raw Normal View History

---
layout: default
title: "جهاز فك ترميز المستندات الشامل"
parent: "Arabic (Beta)"
---
# جهاز فك ترميز المستندات الشامل
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
## العنوان
جهاز فك ترميز المستندات الشامل يعمل بواسطة `unstructured` — استيراد أي تنسيق مستند شائع
من خلال خدمة واحدة مع تتبع كامل وتكامل مع أمين المكتبة، وتسجيل مواقع المصدر كبيانات وصفية لـ "رسم بياني للمعرفة" من أجل التتبع التام.
## المشكلة
يحتوي "TrustGraph" حاليًا على جهاز فك ترميز خاص بملفات PDF. دعم تنسيقات إضافية (DOCX, XLSX, HTML, Markdown، نص عادي، PPTX، إلخ) يتطلب
إما كتابة جهاز فك ترميز جديد لكل تنسيق أو اعتماد مكتبة استخراج عالمية. لكل تنسيق هيكل مختلف — بعضها يعتمد على الصفحات، وبعضها لا — ويجب أن يسجل سلسلة التتبع أين أصل كل جزء من النص المستخرج في المستند الأصلي.
## الحل المقترح
### المكتبة: `unstructured`
استخدم `unstructured.partition.auto.partition()` التي تكتشف تلقائيًا التنسيق من نوع MIME أو امتداد الملف وتستخرج العناصر المنظمة (العنوان، النص السردي، الجدول، عنصر القائمة، إلخ). تحمل كل عنصر بيانات وصفية بما في ذلك:
- `page_number` (للتنسيقات القائمة على الصفحات مثل PDF، PPTX)
- `element_id` (فريد لكل عنصر)
- `coordinates` (مربع إحاطة لملفات PDF)
- `text` (محتوى النص المستخرج)
- `category` (نوع العنصر: العنوان، النص السردي، الجدول، إلخ.)
### أنواع العناصر
تستخرج `unstructured` أنواع العناصر من المستندات. كل عنصر لديه فئة و بيانات وصفية مرتبطة:
**عناصر النص:**
- `Title` — عناوين الأقسام
- `NarrativeText` — فقرات النص
- `ListItem` — عناصر القوائم المرقمة/المسردة
- `Header`, `Footer` — رؤوس/تذييلات الصفحات
- `FigureCaption` — تسميات للرسومات/الصور
- `Formula` — تعبيرات رياضية
- `Address`, `EmailAddress` — معلومات الاتصال
- `CodeSnippet` — كتل التعليمات البرمجية (من markdown)
**الجداول:**
- `Table` — بيانات جدولية منظمة. توفر `unstructured` كلاً من
`element.text` (نص عادي) و `element.metadata.text_as_html`
(علامة HTML `<table` كاملة مع الصفوف والأعمدة والعناوين المحفوظة).
بالنسبة للتنسيقات ذات الهيكل الجدول المحدد (DOCX, XLSX, HTML)، يكون الاستخراج موثوقًا للغاية. بالنسبة لملفات PDF، يعتمد اكتشاف الجداول على
الاستراتيجية `hi_res` مع تحليل التخطيط.
**الصور:**
- `Image` — صور مضمنة يتم اكتشافها من خلال تحليل التخطيط (يتطلب
الاستراتيجية `hi_res`). مع `extract_image_block_to_payload=True`،
ترجع بيانات الصورة كـ base64 في `element.metadata.image_base64`.
النص المستخرج من الصورة متاح في `element.text`.
### معالجة الجداول
الجداول هي مخرج أساسي. عندما يواجه جهاز فك الترميز عنصر `Table`، فإنه يحافظ على هيكل HTML بدلاً من تسويته إلى نص عادي. هذا يوفر لمستخرج LLM (نموذج اللغة الكبير) إدخالًا أفضل بكثير لسحب المعرفة المنظمة من البيانات الجدولية.
يتم تجميع النص الخاص بالصفحة/القسم على النحو التالي:
- عناصر النص: نص عادي، مدمج مع سطور جديدة
- عناصر الجدول: علامة HTML للجدول من `text_as_html`، ومحاطة بـ `<table>` حتى يتمكن نموذج اللغة الكبيرة من التمييز بين الجداول والنص السردي.
على سبيل المثال، صفحة تحتوي على عنوان وفقرة وجدول تنتج:
```
نظرة عامة مالية
ارتفعت الإيرادات بنسبة 15٪ على أساس سنوي مدفوعة باعتماد المؤسسات.
<table>
<tr><th>الربع</th><th>الإيرادات</th><th>النمو</th></tr>
<tr><td>Q1</td><td>$12M</td><td>12%</td></tr>
<tr><td>Q2</td><td>$14M</td><td>17%</td></tr>
</table>
```
هذا يحافظ على هيكل الجدول من خلال التقطيع وإلى مسار الاستخراج، حيث يمكن لنموذج اللغة الكبيرة استخراج العلاقات مباشرة من الخلايا المنظمة بدلاً من تخمين محاذاة الأعمدة من المسافات.
### معالجة الصور
تتم استخراج الصور وتخزينها في أمين المكتبة كأوراق فرعية مع `document_type="image"` ومعرف `urn:image:{uuid}`. إنها تحصل على ثلاثيات تتبع من النوع `tg:Image`، مرتبطة بصفحتها/قسمها الأصلية عبر `prov:wasDerivedFrom`. يتم تسجيل البيانات الوصفية للصورة (الإحداثيات والأبعاد و `element_id`) في التتبع.
**من المهم للغاية، لا يتم إخراج الصور كإخراج `TextDocument`.** يتم تخزينها فقط — ولا يتم إرسالها إلى وحدة تقسيم (chunker) أو أي مسار لمعالجة النصوص. هذا مقصود:
1. لا يوجد مسار لمعالجة الصور بعد (دمج نموذج الرؤية هو عمل مستقبلي)
2. إرسال بيانات صورة base64 أو أجزاء من OCR إلى مسار استخراج النص سينتج عنه ثلاثيات KG (رسم بياني للمعرفة) غير صحيحة.
كما يتم استبعاد الصور من النص المجمع للصفحة/القسم — أي عناصر `Image` يتم تخطيها بصمت عند ربط عناصر النص لصفحة/قسم. يسجل سلسلة التتبع أن الصور موجودة وأين ظهرت في المستند، بحيث يمكن لنموذج معالجة صور مستقبلي التقاطها دون إعادة استيراد المستند.
#### عمل مستقبلي
- توجيه الكيانات `tg:Image` إلى نموذج رؤية للوصف أو تفسير المخططات أو استخراج بيانات الرسم البياني.
- تخزين أوصاف الصور كمستندات نصية فرعية يتم إدخالها في مسار التقطيع/الاستخراج القياسي.
- ربط المعرفة المستخرجة بالصور المصدر عبر التتبع.
### استراتيجيات الأقسام
بالنسبة للتنسيقات القائمة على الصفحات (PDF، PPTX، XLSX)، يتم تجميع العناصر دائمًا حسب الصفحة/الشريحة/الورقة أولاً. بالنسبة للتنسيقات غير القائمة على الصفحات (DOCX، HTML، Markdown، إلخ)، يحتاج جهاز فك الترميز إلى استراتيجية لتقسيم المستند إلى أقسام. هذا قابل للتكوين في وقت التشغيل عبر `--section-strategy`.
تعتبر كل استراتيجية وظيفة تجميع على قائمة `unstructured` للعناصر. الإخراج هو قائمة بمجموعات العناصر؛ يظل بقية المسار (تجميع النص وتخزين أمين المكتبة والتتبع وإصدار `TextDocument`) متطابقًا بغض النظر عن الاستراتيجية.
#### `whole-document` (افتراضي)
إخراج المستند بأكمله كقسم واحد. اسمح لوحدة تقسيم المستند (chunker) بمعالجة جميع عمليات التقسيم.
- أبسط نهج، خط أساس جيد
- قد ينتج عنه `TextDocument` كبير جدًا للملفات الكبيرة، ولكن وحدة التقسيم تتعامل مع ذلك
- الأفضل عندما تريد أقصى قدر من السياق لكل قسم
#### `heading`
التقسيم عند عناصر العناوين (`Title`). كل قسم هو عنوان وجميع المحتويات حتى العنوان التالي من نفس المستوى أو أعلى. تخلق العناوين المتداخلة أقسامًا متداخلة.
- ينتج وحدات متماسكة من الناحية الموضوعية
- يعمل بشكل جيد مع المستندات المنظمة (التقارير والكتيبات والمواصفات)
- يوفر لـ LLM الاستخراج سياق العنوان جنبًا إلى جنب مع المحتوى
- يرجع إلى `whole-document` إذا لم يتم العثور على أي عناوين
#### `element-type`
التقسيم عند حدوث تغيير كبير في نوع العنصر — على وجه التحديد، ابدأ قسمًا جديدًا في الانتقالات بين النص السردي والجداول. تظل العناصر المتتالية من نفس الفئة العامة (نص، نص، نص أو جدول، جدول) مجمعة.
- يحافظ على الجداول كأقسام منفصلة
- جيد للمستندات ذات المحتوى المختلط (التقارير مع الجداول البيانية)
- يتم إعطاء الجداول اهتمام استخراج مخصص
#### `count`
تجميع عدد ثابت من العناصر لكل قسم. قابلة للتكوين عبر `--section-element-count` (افتراضي: 20).
- بسيط وقابل للتنبؤ
- لا يحترم هيكل المستند
- مفيد كحل احتياطي أو للتجريب
#### `size`
تجميع العناصر حتى يتم الوصول إلى حد الأحرف، ثم ابدأ قسمًا جديدًا. يحترم حدود العناصر — لا يقسم في منتصف العنصر. قابلة للتكوين عبر `--section-max-size` (افتراضي: 4000 حرف).
- ينتج أقسامًا ذات أحجام تقريبًا موحدة
- يحترم حدود العناصر (على عكس وحدة التقسيم السفلية)
- حل وسط جيد بين التحكم في الهيكل والحجم
- إذا تجاوز عنصر واحد الحد، فإنه يصبح قسمه الخاص
#### تفاعل مع التنسيق القائم على الصفحة
بالنسبة للتنسيقات القائمة على الصفحات، يكون تجميع الصفحة هو الأولوية دائمًا. يمكن أن تنطبق استراتيجيات القسم بشكل اختياري *داخل* صفحة إذا كانت كبيرة جدًا (على سبيل المثال، صفحة PDF تحتوي على جدول ضخم)، ويتم التحكم في ذلك بواسطة
`--section-within-pages` (افتراضي: false). عندما يكون `false`، تكون كل صفحة دائمًا قسمًا واحدًا بغض النظر عن الحجم.
### اكتشاف التنسيق
يحتاج جهاز فك الترميز إلى معرفة نوع MIME الخاص بالمستند لتمريره إلى `partition()` الخاصة بـ `unstructured`. هناك مساران:
- **مسار أمين المكتبة** (`document_id` مضبوط): استرداد بيانات وصفية المستند من أمين المكتبة أولاً — وهذا يعطينا `kind` (نوع MIME)
الذي تم تسجيله في وقت الرفع. ثم استرداد محتوى المستند.
مكالمتان لأمين المكتبة، ولكن استرداد البيانات الوصفية خفيف الوزن.
- **المسار المضمن** (التوافق مع الإصدارات السابقة، `data` مضبوط): لا توجد بيانات وصفية
متاحة على الرسالة. استخدم `python-magic` لاكتشاف التنسيق
من بايت المحتوى كحل احتياطي.
لا توجد تغييرات ضرورية في مخطط `Document` — يقوم أمين المكتبة بالفعل بتخزين نوع MIME.
### الهندسة المعمارية
خدمة `universal-decoder` واحدة تقوم بما يلي:
1. تتلقى رسالة `Document` (مضمنة أو عبر مرجع أمين المكتبة)
2. إذا كان مسار أمين المكتبة: استرداد بيانات وصفية المستند (الحصول على نوع MIME)، ثم
استرداد المحتوى. إذا كان المسار المضمن: اكتشاف التنسيق من بايت المحتوى.
3. تستدعي `partition()` لاستخراج العناصر
4. تجميع العناصر: حسب الصفحة للتنسيقات القائمة على الصفحات، حسب استراتيجية القسم المحددة للتنسيقات غير القائمة على الصفحات
5. لكل صفحة/قسم:
- توليد معرف `urn:page:{uuid}` أو `urn:section:{uuid}`
- تجميع نص الصفحة: النص العادي، والجداول كـ HTML،
الصور يتم تخطيها
- حساب إزاحة الأحرف لكل عنصر داخل نص الصفحة
- حفظ في أمين المكتبة كوثيقة فرعية
- حساب ثلاثيات تتبع مع بيانات وصفية موضعية
- إرسال `TextDocument` إلى وحدة تقسيم (chunker)
6. لكل عنصر صورة:
- توليد معرف `urn:image:{uuid}`
- حفظ بيانات الصورة في أمين المكتبة كوثيقة فرعية
- حساب ثلاثيات تتبع (مخزنة فقط، ولا يتم إرسالها إلى وحدة تقسيم)
### معالجة التنسيقات
| التنسيق | نوع MIME | قائم على الصفحات | ملاحظات |
|---|---|---|---|
| PDF | application/pdf | نعم | تجميع حسب الصفحة |
| DOCX | application/vnd.openxmlformats... | لا | يستخدم استراتيجية القسم |
| PPTX | application/vnd.openxmlformats... | نعم | تجميع حسب الشريحة |
| XLSX/XLS | application/vnd.openxmlformats... | نعم | تجميع حسب ورقة العمل |
| HTML | text/html | لا | يستخدم استراتيجية القسم |
| Markdown | text/markdown | لا | يستخدم استراتيجية القسم |
| Plain | text/plain | لا | يستخدم استراتيجية القسم |
| CSV | text/csv | لا | يستخدم استراتيجية القسم |
| RST | text/x-rst | لا | يستخدم استراتيجية القسم |
| RTF | application/rtf | لا | يستخدم استراتيجية القسم |
| ODT | application/vnd.oasis... | لا | يستخدم استراتيجية القسم |
| TSV | text/tab-separated-values | لا | يستخدم استراتيجية القسم |
### بيانات التتبع
تسجل كل صفحة/قسم كيان بيانات وصفية موضعية على شكل ثلاثيات تتبع في الرسم البياني المصدر (`GRAPH_SOURCE`)، مما يتيح التتبع التام من ثلاثيات KG (رسم بياني للمعرفة) إلى مواضع المستند المصدر.
#### الحقول الحالية (موجودة بالفعل في `provenance/triples.py`)
- `page_number` — رقم الصفحة/الورقة/الشريحة (مرقم 1، فقط للتنسيقات القائمة على الصفحات)
- `char_offset` — إزاحة الحرف لهذه الصفحة/القسم داخل نص المستند بالكامل
- `char_length` — طول الحرف لنص هذه الصفحة/القسم
#### حقول جديدة (قم بتوسيع `provenance/triples.py`)
- `mime_type` — تنسيق المستند الأصلي (على سبيل المثال، `application/pdf`)
- `element_types` — قائمة `unstructured` لفئات العناصر الموجودة في هذه الصفحة/القسم (على سبيل المثال، "العنوان،النص السردي،الجدول")
- `table_count` — عدد الجداول في هذه الصفحة/القسم
- `image_count` — عدد الصور في هذه الصفحة/القسم
يتطلب هذا بناء جملة جديد لأسماء النطاقات:
```
TG_SECTION_TYPE = "https://trustgraph.ai/ns/Section"
TG_IMAGE_TYPE = "https://trustgraph.ai/ns/Image"
TG_ELEMENT_TYPES = "https://trustgraph.ai/ns/elementTypes"
TG_TABLE_COUNT = "https://trustgraph.ai/ns/tableCount"
TG_IMAGE_COUNT = "https://trustgraph.ai/ns/imageCount"
```
مخطط URN للصورة: `urn:image:{uuid}`
(`TG_MIME_TYPE` موجود بالفعل.)
#### نوع الكيان الجديد
بالنسبة للتنسيقات غير القائمة على الصفحات (DOCX، HTML، Markdown، إلخ) حيث يقوم جهاز فك الترميز بإخراج المستند بأكمله كقسم واحد بدلاً من التقسيم حسب الصفحة، يحصل الكيان على نوع جديد:
```
TG_SECTION_TYPE = "https://trustgraph.ai/ns/Section"
```
هذا يميز الأقسام عن الصفحات عند الاستعلام عن التتبع:
| الكيان | النوع | متى يتم استخدامه |
|---|---|---|
| Document | `tg:Document` | الملف الذي تم رفعه أصلاً |
| Page | `tg:Page` | تنسيقات قائمة على الصفحات (PDF، PPTX، XLSX) |
| Section | `tg:Section` | تنسيقات غير قائمة على الصفحات (DOCX، HTML، MD، إلخ) |
| Image | `tg:Image` | صور مضمنة (مخزنة، وغير معالجة) |
| Chunk | `tg:Chunk` | إخراج وحدة تقسيم المستند |
| Subgraph | `tg:Subgraph` | إخراج KG |
يتم تعيين النوع بواسطة جهاز فك الترميز بناءً على ما إذا كان يقوم بتجميع حسب الصفحة أم أنه يصدر قسمًا كاملاً للمستند. تكتسب `provenance/triples.py` معلمة اختيارية `section` — عندما تكون `true`، يتم تصنيف الكيان على أنه `tg:Section` بدلاً من `tg:Page`.
#### سلسلة التتبع الكاملة
```
ثلاثية KG
→ subgraph (تتبع الاستخراج)
→ chunk (char_offset، char_length داخل الصفحة)
→ page/section (page_number، char_offset، char_length داخل المستند، mime_type، element_types)
→ document (الملف الأصلي في أمين المكتبة)
```
كل رابط هو مجموعة من الثلاثيات في الرسم البياني المسمى `GRAPH_SOURCE`.
### تكوين الخدمة
وسيطات سطر الأوامر:
```
--strategy استراتيجية التقسيم: auto, hi_res, fast (افتراضي: auto)
--languages قائمة مفصولة بفواصل برموز لغة OCR (افتراضي: eng)
--section-strategy استراتيجية تجميع القسم: whole-document, heading, element-type,
count, size (افتراضي: whole-document)
--section-element-count عدد العناصر لكل قسم (افتراضي: 20)
--section-max-size الحد الأقصى لحجم القسم (بالأحرف) (افتراضي: 4000)
```
### التنفيذ
خدمة `universal-decoder` واحدة تقوم بما يلي:
1. تتلقى رسالة `Document` (مضمنة أو عبر مرجع أمين المكتبة)
2. إذا كان مسار أمين المكتبة: استرداد بيانات وصفية المستند (الحصول على نوع MIME)، ثم
استرداد المحتوى. إذا كان المسار المضمن: اكتشاف التنسيق من بايت المحتوى.
3. تستدعي `partition()` لاستخراج العناصر
4. تجميع العناصر: حسب الصفحة للتنسيقات القائمة على الصفحات، حسب استراتيجية القسم المحددة للتنسيقات غير القائمة على الصفحات
5. لكل صفحة/قسم:
- توليد معرف `urn:page:{uuid}` أو `urn:section:{uuid}`
- تجميع نص الصفحة: النص العادي، والجداول كـ HTML،
الصور يتم تخطيها
- حساب إزاحة الأحرف لكل عنصر داخل نص الصفحة
- حفظ في أمين المكتبة كوثيقة فرعية
- حساب ثلاثيات تتبع مع بيانات وصفية موضعية
- إرسال `TextDocument` إلى وحدة تقسيم (chunker)
6. لكل عنصر صورة:
- توليد معرف `urn:image:{uuid}`
- حفظ بيانات الصورة في أمين المكتبة كوثيقة فرعية
- حساب ثلاثيات تتبع (مخزنة فقط، ولا يتم إرسالها إلى وحدة تقسيم)
### معالجة التنسيقات
| التنسيق | نوع MIME | قائم على الصفحات | ملاحظات |
|---|---|---|---|
| PDF | application/pdf | نعم | تجميع حسب الصفحة |
| DOCX | application/vnd.openxmlformats... | لا | يستخدم استراتيجية القسم |
| PPTX | application/vnd.openxmlformats... | نعم | تجميع حسب الشريحة |
| XLSX/XLS | application/vnd.openxmlformats... | نعم | تجميع حسب ورقة العمل |
| HTML | text/html | لا | يستخدم استراتيجية القسم |
| Markdown | text/markdown | لا | يستخدم استراتيجية القسم |
| Plain | text/plain | لا | يستخدم استراتيجية القسم |
| CSV | text/csv | لا | يستخدم استراتيجية القسم |
| RST | text/x-rst | لا | يستخدم استراتيجية القسم |
| RTF | application/rtf | لا | يستخدم استراتيجية القسم |
| ODT | application/vnd.oasis... | لا | يستخدم استراتيجية القسم |
| TSV | text/tab-separated-values | لا | يستخدم استراتيجية القسم |
### بيانات التتبع
تسجل كل صفحة/قسم كيان بيانات وصفية موضعية على شكل ثلاثيات تتبع في الرسم البياني المصدر (`GRAPH_SOURCE`)، مما يتيح التتبع التام من ثلاثيات KG (رسم بياني للمعرفة) إلى مواضع المستند المصدر.
#### الحقول الحالية (موجودة بالفعل في `provenance/triples.py`)
- `page_number` — رقم الصفحة/الورقة/الشريحة (مرقم 1، فقط للتنسيقات القائمة على الصفحات)
- `char_offset` — إزاحة الحرف لهذه الصفحة/القسم داخل نص المستند بالكامل
- `char_length` — طول الحرف لنص هذه الصفحة/القسم
#### حقول جديدة (قم بتوسيع `provenance/triples.py`)
- `mime_type` — تنسيق المستند الأصلي (على سبيل المثال، `application/pdf`)
- `element_types` — قائمة `unstructured` لفئات العناصر الموجودة في هذه الصفحة/القسم (على سبيل المثال، "العنوان،النص السردي،الجدول")
- `table_count` — عدد الجداول في هذه الصفحة/القسم
- `image_count` — عدد الصور في هذه الصفحة/القسم
يتطلب هذا بناء جملة جديد لأسماء النطاقات:
```
TG_SECTION_TYPE = "https://trustgraph.ai/ns/Section"
TG_IMAGE_TYPE = "https://trustgraph.ai/ns/Image"
TG_ELEMENT_TYPES = "https://trustgraph.ai/ns/elementTypes"
TG_TABLE_COUNT = "https://trustgraph.ai/ns/tableCount"
TG_IMAGE_COUNT = "https://trustgraph.ai/ns/imageCount"
```
مخطط URN للصورة: `urn:image:{uuid}`
(`TG_MIME_TYPE` موجود بالفعل.)
#### نوع الكيان الجديد
بالنسبة للتنسيقات غير القائمة على الصفحات (DOCX، HTML، Markdown، إلخ) حيث يقوم جهاز فك الترميز بإخراج المستند بأكمله كقسم واحد بدلاً من التقسيم حسب الصفحة، يحصل الكيان على نوع جديد:
```
TG_SECTION_TYPE = "https://trustgraph.ai/ns/Section"
```
هذا يميز الأقسام عن الصفحات عند الاستعلام عن التتبع:
| الكيان | النوع | متى يتم استخدامه |
|---|---|---|
| Document | `tg:Document` | الملف الذي تم رفعه أصلاً |
| Page | `tg:Page` | تنسيقات قائمة على الصفحات (PDF، PPTX، XLSX) |
| Section | `tg:Section` | تنسيقات غير قائمة على الصفحات (DOCX، HTML، MD، إلخ) |
| Image | `tg:Image` | صور مضمنة (مخزنة، وغير معالجة) |
| Chunk | `tg:Chunk` | إخراج وحدة تقسيم المستند |
| Subgraph | `tg:Subgraph` | إخراج KG |
يتم تعيين النوع بواسطة جهاز فك الترميز بناءً على ما إذا كان يقوم بتجميع حسب الصفحة أم أنه يصدر قسمًا كاملاً للمستند. تكتسب `provenance/triples.py` معلمة اختيارية `section` — عندما تكون `true`، يتم تصنيف الكيان على أنه `tg:Section` بدلاً من `tg:Page`.
#### سلسلة التتبع الكاملة
```
ثلاثية KG
→ subgraph (تتبع الاستخراج)
→ chunk (char_offset، char_length داخل الصفحة)
→ page/section (page_number، char_offset، char_length داخل المستند، mime_type، element_types)
→ document (الملف الأصلي في أمين المكتبة)
```
كل رابط هو مجموعة من الثلاثيات في الرسم البياني المسمى `GRAPH_SOURCE`.
### التثبيت
تأكد من أن لديك Python 3.6+ مثبتًا.
```bash
pip install unstructured
```
### الاستخدام
```python
from unstructured.partition.auto import partition
# مثال على ملف PDF
pdf = partition(filename="path/to/your/document.pdf")
# مثال على ملف HTML
html = partition(filename="path/to/your/document.html")
```
سيقوم هذا بتقسيم المستند إلى عناصر مثل العناوين والنصوص والجداول والصور. يمكنك بعد ذلك معالجة هذه العناصر بشكل منفصل.
### الاعتبارات
- **الأداء:** قد يكون تقسيم المستندات الكبيرة أمرًا مكلفًا من الناحية الحسابية. ضع في اعتبارك استخدام التخزين المؤقت أو المعالجة المتوازية للمستندات الكبيرة جدًا.
- **الدقة:** دقة التقسيم تعتمد على تنسيق المستند. قد تتطلب بعض المستندات معالجة خاصة للحصول على أفضل النتائج.
### المساهمة
إذا كنت ترغب في المساهمة في `unstructured`، فيرجى إرسال طلب سحب. نحن نقبل المساهمات من جميع أنواع.
### الترخيص
`unstructured` مرخصة بموجب رخصة Apache 2.0.