Docling - تحليل المستندات لـ RAG
Docling هي مجموعة أدوات تحليل مستند مفتوحة المصدر (مشروع LF AI & Data) التي تحول PDF و DOCX و PPTX و XLSX و HTML والصور والمزيد إلى تمثيل منظم — Markdown نظيف أو JSON يحافظ على التخطيط والجداول والرؤوس وترتيب القراءة. يتضمن تقسيم يدرك الهرمية الذي يثري الأجزاء بيانات الكود الهيكلية، ويتكامل مباشرة مع LangChain و LlamaIndex، مما يجعله أحد الخيارات مفتوحة المصدر الأقوى لمرحلة الاستيعاب من خط أنابيب RAG.
التثبيت
| الطريقة | الأمر |
|---|
| pip | pip install docling |
| uv | uv add docling |
| With OCR extras | pip install "docling[ocr]" |
| التحقق | docling --version |
استخدام CLI
| الأمر | الوصف |
|---|
docling document.pdf | تحويل ملف إلى Markdown (افتراضي) |
docling --to json document.pdf | JSON منظم الإخراج |
docling --to md --output out/ report.docx | تحويل إلى دليل |
docling https://example.com/page.html | تحويل من URL |
docling --ocr scanned.pdf | فرض OCR للمستندات الممسوحة ضوئياً |
docling --help | قائمة الخيارات الكاملة |
Python: التحويل الأساسي
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("report.pdf")
doc = result.document
print(doc.export_to_markdown()) # clean Markdown
print(doc.export_to_dict()) # structured JSON-able dict
| الطريقة | العوائد |
|---|
export_to_markdown() | Markdown مع الحفاظ على الرؤوس/الجداول |
export_to_dict() | نموذج وثيقة منظم (JSON-قابل للعد) |
export_to_doctags() | تمثيل DocTags |
result.document | DoclingDocument المحلل |
المدخلات المدعومة
| الشكل | ملاحظات |
|---|
| PDF | التخطيط والجداول وترتيب القراءة؛ OCR للمسح |
| DOCX / PPTX / XLSX | تنسيقات Office |
| HTML | صفحات ويب والتصدير |
| الصور | PNG/JPG/TIFF عبر OCR |
| Markdown / AsciiDoc | معاد بناؤها في نموذج المستند |
التقسيم الذي يدرك الهرمية
محللات Docling تقسم مستند محلل للتضمين أثناء الحفاظ على السياق الهيكلي (رؤوس القسم وحدود الجدول) في بيانات وصفية للكل.
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
doc = DocumentConverter().convert("report.pdf").document
chunker = HybridChunker(tokenizer="sentence-transformers/all-MiniLM-L6-v2")
for chunk in chunker.chunk(doc):
print(chunk.text)
print(chunk.meta) # headings, page, provenance
| Chunker | السلوك |
|---|
HierarchicalChunker | انقسام على هيكل المستند (الأقسام والعناصر) |
HybridChunker | Structure-aware + tokenizer-aware sizing/merging |
chunk.meta | يحمل الرؤوس/الأصل للتوسع السياق |
تكامل إطار عمل RAG
| الإطار | الطريقة |
|---|
| LangChain | DoclingLoader إرجاع الوثائق/الأجزاء |
| LlamaIndex | قارئ Docling/محلل العقدة |
| مخصص | استخدم export_to_markdown() أو إخراج chunker مباشرة |
# LangChain example
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()
الأداء والخيارات
| الخيار | الغرض |
|---|
| محرك OCR | اختر/عطل OCR (EasyOCR و Tesseract وغيره) |
| جدول الموضع | استرجاع بنية جدول دقيقة مقابل سريعة |
| الجهاز | تشغيل النماذج على CPU أو GPU |
| نطاق الصفحة | تحديد التحويل للصفحات المحددة |
| خيارات خط الأنابيب | ضبط خط أنابيب التحويل لكل تنسيق |
سير العمل المشتركة
# تحويل مجلد من PDF إلى Markdown للاستيعاب
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# تحليل → جزء → تضمين، أساس استيعاب RAG
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# embed each chunk.text with your model, store chunk.meta alongside
Docling مقابل محللات أخرى
| الجانب | Docling | Unstructured | Marker |
|---|
| الإخراج | Markdown + نموذج منظم | العناصر المكتوبة | Markdown |
| التقسيم | بنيت في يدرك الهرمية | على أساس العنصر | خارجي |
| السرعة | جيد (CPU) | جيد | أسرع مع GPU |
| الأفضل لـ | استيعاب RAG الذاتي الاستضافة | أنابيب العنصر المكتوبة | تضمين Markdown الحجم GPU |
الموارد