mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-26 17:06:22 +02:00
release/v2.3 -> master (#837)
This commit is contained in:
parent
222537c26b
commit
a24df8e990
431 changed files with 244 additions and 49 deletions
419
docs/tech-specs/ar/universal-decoder.ar.md
Normal file
419
docs/tech-specs/ar/universal-decoder.ar.md
Normal file
|
|
@ -0,0 +1,419 @@
|
|||
---
|
||||
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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue