إجابة مختصرة: Docling هي مكتبة Python مفتوحة المصدر تحول ملفات PDF و Word و HTML غير المنظمة إلى نصوص نظيفة ومنظمة يمكنك إدخالها إلى تطبيق ذكاء اصطناعي. يشرح هذا الدليل عملية التثبيت، وواجهة برمجة التطبيقات الأساسية، والأنماط العملية التي تستحق الاستخدام منذ اليوم الأول.
جرّب HAQQ AI مجاناً
اختبر الصياغة والبحث القانوني بالذكاء الاصطناعي
يمثل العمل مع المستندات بتنسيقات مختلفة تحديًا شائعًا عند بناء تطبيقات الذكاء الاصطناعي. سواء كنت تقوم بمعالجة ملفات PDF أو مستندات Word أو ملفات HTML، يمكن أن يكون استخراج نص نظيف ومنظم أمرًا صعبًا بشكل مفاجئ. Docling هي مكتبة Python تجعل هذه العملية سهلة ومباشرة.
يرشدك هذا الدليل خلال أساسيات استخدام Docling لمعالجة المستندات، مع التركيز على الأمثلة العملية وأفضل الممارسات التي يمكنك تطبيقها على الفور.
لماذا Docling؟
يحل Docling مشكلات معالجة المستندات الشائعة بطريقة موحدة. يوفر دعمًا متعدد التنسيقات يعمل بسلاسة مع ملفات PDF ومستندات Word وعروض PowerPoint التقديمية و HTML والمزيد. تتضمن المكتبة إمكانيات التعرف الضوئي على الحروف (OCR) التي يمكنها استخراج النص حتى من المستندات والصور الممسوحة ضوئيًا، مما يجعلها متعددة الاستخدامات لأنواع المستندات المختلفة.
ما يميز Docling هو ميزة التقطيع الذكي التي تقسم المستندات إلى أجزاء ذات معنى مع الحفاظ على السياق، بدلاً من تقسيم النص بشكل عشوائي. يكون الناتج نظيفًا ومنظمًا، سواء كنت بحاجة إلى تنسيق Markdown أو نص عادي. والأفضل من ذلك كله، يقدم Docling واجهة برمجة تطبيقات بسيطة وبديهية يسهل البدء بها، حتى للمطورين الجدد في معالجة المستندات.
البدء
أولاً، قم بتثبيت Docling:
pip install doclingالاستخدام الأساسي
تحويل مستند
أبسط طريقة لاستخدام Docling هي عبر DocumentConverter:
from docling.document_converter import DocumentConverter
# Create a converter
converter = DocumentConverter()
# Convert a document
result = converter.convert("document.pdf")
document = result.document
# Export to markdown
markdown_text = document.export_to_markdown()
print(markdown_text)هذا كل ما في الأمر! يقوم Docling تلقائيًا باكتشاف تنسيق الملف ومعالجته بناءً عليه.
العمل مع مصادر ملفات مختلفة
يمكن لـ Docling معالجة الملفات المحلية وعناوين URL البعيدة:
from docling.document_converter import DocumentConverter
import requests
import tempfile
converter = DocumentConverter()
# Local file
result = converter.convert("/path/to/document.pdf")
# Remote URL - download first
url = "https://example.com/document.pdf"
response = requests.get(url)
with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp:
tmp.write(response.content)
tmp_path = tmp.name
result = converter.convert(tmp_path)
# Don't forget to clean up
import os
os.unlink(tmp_path)ما هي التنسيقات المدعومة؟
يعمل Docling مع العديد من تنسيقات الملفات الشائعة بشكل افتراضي. يتعامل مع ملفات PDF، بما في ذلك المستندات الممسوحة ضوئيًا باستخدام تقنية التعرف الضوئي على الحروف (OCR). يتم دعم تنسيقات Microsoft Office مثل Word (.docx) وPowerPoint (.pptx) بالكامل، وكذلك تنسيقات الويب مثل HTML. يمكنك أيضًا معالجة ملفات Markdown ومستندات النص العادي وحتى ملفات الصور (.webp, .webp) باستخدام إمكانيات OCR المدمجة فيه.
يقوم DocumentConverter تلقائيًا باكتشاف تنسيق الملف وتطبيق طريقة المعالجة المناسبة، لذلك لا داعي للقلق بشأن تحديد النوع بشكل صريح.
تقسيم المستندات إلى أجزاء (Chunking)
بالنسبة للعديد من تطبيقات الذكاء الاصطناعي، تحتاج إلى تقسيم المستندات إلى أجزاء أصغر ("chunks"). يجعل HybridChunker من Docling هذه العملية ذكية وسهلة.
تجزئة أساسية
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
from transformers import AutoTokenizer
# Convert document
converter = DocumentConverter()
result = converter.convert("document.pdf")
document = result.document
# Set up chunker with your tokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
chunker = HybridChunker(
tokenizer=tokenizer,
max_tokens=512 # Maximum tokens per chunk
)
# Get chunks
chunks = list(chunker.chunk(document))
# Process chunks
for i, chunk in enumerate(chunks):
print(f"Chunk {i}: {chunk.text[:100]}...")لماذا تستخدم HybridChunker؟
يوفر HybridChunker تقسيمًا ذكيًا للمستندات يتجاوز العد البسيط للأحرف أو الكلمات. فهو يحافظ على هياكل المستندات الطبيعية مثل الفقرات والأقسام، مما يضمن عدم حصولك على أجزاء مقطوعة بشكل غير ملائم في منتصف الجملة. وهذا مهم بشكل خاص للحفاظ على المعنى الدلالي في النص الخاص بك.
- يحافظ على هياكل المستندات الطبيعية مثل الفقرات والأقسام
- تجزئة واعية بالرموز تحترم حدود نموذج التضمين
- أحجام تجزئة قابلة للتكوين بناءً على احتياجاتك المحددة
- يحافظ على تتبع البيانات الوصفية التي تحدد مصدر كل تجزئة
العمل مع البيانات الوصفية
يستخرج Docling بيانات وصفية مفيدة من المستندات:
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("document.pdf")
document = result.document
# Access document metadata
if hasattr(document, 'meta'):
print(f"Document metadata: {document.meta}")
# Chunk with metadata
from docling.chunking import HybridChunker
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
chunker = HybridChunker(tokenizer=tokenizer, max_tokens=512)
for chunk in chunker.chunk(document):
print(f"Text: {chunk.text[:50]}...")
if hasattr(chunk, 'meta'):
print(f"Metadata: {chunk.meta}")تجميع كل ذلك معًا
إليك مثال كامل يعالج مستندًا ويجهزه للاستخدام في تطبيق ذكاء اصطناعي:
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
from transformers import AutoTokenizer
def process_document(file_path, max_tokens=512):
"""Process a document and return chunks ready for embedding."""
# Step 1: Convert document
converter = DocumentConverter()
result = converter.convert(file_path)
document = result.document
# Step 2: Set up chunker
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
chunker = HybridChunker(
tokenizer=tokenizer,
max_tokens=max_tokens
)
# Step 3: Get chunks
chunks = []
for i, chunk in enumerate(chunker.chunk(document)):
chunks.append({
'text': chunk.text,
'index': i,
'source': file_path
})
return chunks
# Usage
chunks = process_document("my_document.pdf")
print(f"Created {len(chunks)} chunks")
for chunk in chunks:
print(f"Chunk {chunk['index']}: {chunk['text'][:50]}...")نصائح عملية
معالجة مستندات متعددة
import os
from pathlib import Path
def process_folder(folder_path, max_tokens=512):
"""Process all PDFs in a folder."""
all_chunks = []
for file_path in Path(folder_path).glob("*.pdf"):
try:
chunks = process_document(str(file_path), max_tokens)
all_chunks.extend(chunks)
print(f"Processed {file_path.name}: {len(chunks)} chunks")
except Exception as e:
print(f"Failed to process {file_path.name}: {e}")
return all_chunksالتصدير إلى تنسيقات مختلفة
يمكن لـ Docling تصدير المستندات إلى تنسيقات مختلفة:
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("document.pdf")
document = result.document
# Export to markdown
markdown = document.export_to_markdown()
with open("output.md", "w", encoding="utf-8") as f:
f.write(markdown)
# Export to plain text
text = document.export_to_text()
with open("output.txt", "w", encoding="utf-8") as f:
f.write(text)التعامل مع الأخطاء بسلاسة
def safe_process_document(file_path):
"""Process document with error handling."""
try:
converter = DocumentConverter()
result = converter.convert(file_path)
return result.document
except FileNotFoundError:
print(f"File not found: {file_path}")
return None
except Exception as e:
print(f"Error processing {file_path}: {e}")
return Noneبناء نظام بحث مستندات
أحد الاستخدامات الأكثر شيوعًا لـ Docling هو بناء أنظمة بحث مستندات مدعومة بالذكاء الاصطناعي. عن طريق دمج معالجة مستندات Docling مع نماذج التضمين، يمكنك إنشاء قدرات بحث دلالي قوية.
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
from transformers import AutoTokenizer, AutoModel
import torch
# Process and embed documents
def build_document_index(file_paths):
converter = DocumentConverter()
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")
chunker = HybridChunker(tokenizer=tokenizer, max_tokens=512)
document_index = []
for file_path in file_paths:
# Convert and chunk
result = converter.convert(file_path)
chunks = list(chunker.chunk(result.document))
# Create embeddings for each chunk
for chunk in chunks:
inputs = tokenizer(chunk.text, return_tensors="pt",
truncation=True, max_length=512)
with torch.no_grad():
embedding = model(**inputs).last_hidden_state.mean(dim=1)
document_index.append({
'text': chunk.text,
'embedding': embedding,
'source': file_path
})
return document_indexنصائح للأداء
اختر الحجم المناسب للجزء
طابق حجم الأجزاء مع نموذج التضمين الخاص بك:
# For most sentence transformers (512 token limit)
chunker = HybridChunker(tokenizer=tokenizer, max_tokens=512)
# For models with larger context windows
chunker = HybridChunker(tokenizer=tokenizer, max_tokens=2048)معالجة الملفات بالتوازي
from concurrent.futures import ThreadPoolExecutor
def process_multiple_files(file_paths, max_workers=4):
with ThreadPoolExecutor(max_workers=max_workers) as executor:
results = list(executor.map(process_document, file_paths))
return resultsالخاتمة
يجعل Docling معالجة المستندات أمراً مباشراً من خلال توفير واجهة برمجة تطبيقات بسيطة تتيح لك تحويل أي مستند ببضعة أسطر من التعليمات البرمجية فقط. تقوم قدراته الذكية على تقسيم المستندات بتقسيم المستندات إلى أجزاء ذات معنى تحافظ على السياق والهيكل، مما يجعله مثالياً لتطبيقات الذكاء الاصطناعي.
سواء كنت تقوم بإنشاء نظام بحث، أو روبوت محادثة، أو أداة لتحليل المستندات، أو أي تطبيق ذكاء اصطناعي يحتاج إلى العمل مع المستندات، فإن Docling يوفر الأساس الذي تحتاجه.
إن الجمع بين سهولة الاستخدام والميزات القوية للمكتبة يجعلها خياراً ممتازاً لتطبيقات النماذج الأولية والإنتاج على حد سواء. بفضل دعمها متعدد التنسيقات لملفات PDF ومستندات Word وHTML والمزيد، بالإضافة إلى ميزة التعرف الضوئي على الحروف (OCR) المدمجة للمستندات الممسوحة ضوئياً، يتعامل Docling مع تعقيد معالجة المستندات حتى لا تضطر إلى ذلك.
الموارد
يمكنك العثور على مشروع Docling على GitHub حيث ستجد الكود المصدري والوثائق الإضافية. للعمل مع نماذج المحولات (transformer models) وأجهزة ترميز الكلمات (tokenizers)، راجع وثائق Hugging Face Transformers. توفر وثائق Docling معلومات أكثر تفصيلاً حول الميزات المتقدمة وخيارات التكوين.



