إنتقل إلى المحتوى الرئيسي

الفصل 1: محمّلات الوثائق

مقدمة​

محمّلات الوثائق هي نقطة الدخول لأي خط أنابيب RAG. تستخرج المحتوى النصي من صيغ ملفات ومصادر متنوعة، وتهيّئه للمعالجة اللاحقة.

محمّلات وثائق LangChain​

يوفّر LangChain أكثر من 100 محمّل وثائق لمصادر مختلفة:

محمّلات PDF​

from langchain.document_loaders import (
PyPDFLoader,
PDFPlumberLoader,
PyMuPDFLoader,
UnstructuredPDFLoader
)

# Basic PDF loading
loader = PyPDFLoader("document.pdf")
documents = loader.load()

# For better table extraction
loader = PDFPlumberLoader("document.pdf")
documents = loader.load()

# For scanned PDFs (with OCR)
loader = UnstructuredPDFLoader(
"scanned.pdf",
mode="elements",
strategy="ocr_only"
)

النص وMarkdown​

from langchain.document_loaders import (
TextLoader,
UnstructuredMarkdownLoader
)

# Plain text
loader = TextLoader("readme.txt", encoding="utf-8")
docs = loader.load()

# Markdown with structure
loader = UnstructuredMarkdownLoader("docs.md")
docs = loader.load()

محتوى الويب​

from langchain.document_loaders import (
WebBaseLoader,
UnstructuredURLLoader,
RecursiveUrlLoader
)

# Single page
loader = WebBaseLoader("https://example.com/docs")
docs = loader.load()

# Multiple URLs
loader = UnstructuredURLLoader(urls=[
"https://example.com/page1",
"https://example.com/page2"
])

# Crawl entire site
loader = RecursiveUrlLoader(
url="https://docs.example.com",
max_depth=3
)

وثائق Office​

from langchain.document_loaders import (
Docx2txtLoader,
UnstructuredWordDocumentLoader,
UnstructuredPowerPointLoader,
UnstructuredExcelLoader
)

# Word documents
loader = Docx2txtLoader("report.docx")
docs = loader.load()

# PowerPoint
loader = UnstructuredPowerPointLoader("presentation.pptx")
docs = loader.load()

# Excel
loader = UnstructuredExcelLoader("data.xlsx")
docs = loader.load()

قارئات LlamaIndex​

يقدّم LlamaIndex SimpleDirectoryReader وقارئات متخصّصة:

from llama_index import SimpleDirectoryReader
from llama_index.readers import PDFReader, DocxReader

# Load entire directory
reader = SimpleDirectoryReader(
input_dir="./documents",
recursive=True,
exclude_hidden=True,
required_exts=[".pdf", ".docx", ".txt"]
)
documents = reader.load_data()

# Specific reader
pdf_reader = PDFReader()
docs = pdf_reader.load_data(file_path="document.pdf")

محمّلات قواعد البيانات​

from langchain.document_loaders import (
SQLDatabaseLoader,
CSVLoader
)

# From SQL database
loader = SQLDatabaseLoader(
query="SELECT content, metadata FROM documents",
db=database_connection
)

# From CSV
loader = CSVLoader(
file_path="data.csv",
source_column="source",
csv_args={"delimiter": ","}
)

بنية الوثيقة​

تعيد كل المحمّلات كائنات Document:

from langchain.schema import Document

# Document structure
doc = Document(
page_content="The actual text content...",
metadata={
"source": "document.pdf",
"page": 1,
"author": "John Doe",
"created_date": "2024-01-15"
}
)

أفضل الممارسات​

الممارسةالوصف
معالجة الأخطاءالتقط دائمًا أخطاء الملف غير الموجود وأخطاء التحليل
الترميزحدّد ترميز UTF-8 لملفات النص
Metadataاحفظ معلومات المصدر للاستشهادات
التحميل الدفعيحمّل عدة ملفات بكفاءة
# Robust loading with error handling
def load_documents_safely(file_paths):
documents = []
errors = []

for path in file_paths:
try:
loader = get_loader_for_file(path)
docs = loader.load()
documents.extend(docs)
except Exception as e:
errors.append({"file": path, "error": str(e)})

return documents, errors

ملخص​

  • LangChain يقدّم أكثر من 100 محمّل لصيغ متنوعة
  • LlamaIndex يوفّر SimpleDirectoryReader للتحميل الدفعي السهل
  • احفظ metadata دائمًا لإسناد المصادر
  • عالج الأخطاء بلطف في الأنظمة الإنتاجية

الخطوات التالية​

تابع إلى الفصل 2: تقسيم النص للتعرّف على استراتيجيات الـ chunking.