الفصل 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.