Chapitre 1 : Chargeurs de documents
Introduction
Les chargeurs de documents sont le point d'entrée de tout pipeline RAG. Ils extraient le contenu textuel de divers formats de fichiers et sources, le préparant pour un traitement ultérieur.
Chargeurs de documents LangChain
LangChain propose plus de 100 chargeurs de documents pour différentes sources :
Chargeurs PDF
from langchain.document_loaders import (
PyPDFLoader,
PDFPlumberLoader,
PyMuPDFLoader,
UnstructuredPDFLoader
)
# Chargement PDF basique
loader = PyPDFLoader("document.pdf")
documents = loader.load()
# Pour une meilleure extraction des tableaux
loader = PDFPlumberLoader("document.pdf")
documents = loader.load()
# Pour les PDF scannés (avec OCR)
loader = UnstructuredPDFLoader(
"scanned.pdf",
mode="elements",
strategy="ocr_only"
)
Texte et Markdown
from langchain.document_loaders import (
TextLoader,
UnstructuredMarkdownLoader
)
# Texte brut
loader = TextLoader("readme.txt", encoding="utf-8")
docs = loader.load()
# Markdown avec structure
loader = UnstructuredMarkdownLoader("docs.md")
docs = loader.load()
Contenu Web
from langchain.document_loaders import (
WebBaseLoader,
UnstructuredURLLoader,
RecursiveUrlLoader
)
# Page unique
loader = WebBaseLoader("https://example.com/docs")
docs = loader.load()
# Plusieurs URL
loader = UnstructuredURLLoader(urls=[
"https://example.com/page1",
"https://example.com/page2"
])
# Explorer l'ensemble du site
loader = RecursiveUrlLoader(
url="https://docs.example.com",
max_depth=3
)
Documents Office
from langchain.document_loaders import (
Docx2txtLoader,
UnstructuredWordDocumentLoader,
UnstructuredPowerPointLoader,
UnstructuredExcelLoader
)
# Documents Word
loader = Docx2txtLoader("report.docx")
docs = loader.load()
# PowerPoint
loader = UnstructuredPowerPointLoader("presentation.pptx")
docs = loader.load()
# Excel
loader = UnstructuredExcelLoader("data.xlsx")
docs = loader.load()
Lecteurs LlamaIndex
LlamaIndex propose SimpleDirectoryReader et des lecteurs spécialisés :
from llama_index import SimpleDirectoryReader
from llama_index.readers import PDFReader, DocxReader
# Charger tout le répertoire
reader = SimpleDirectoryReader(
input_dir="./documents",
recursive=True,
exclude_hidden=True,
required_exts=[".pdf", ".docx", ".txt"]
)
documents = reader.load_data()
# Lecteur spécifique
pdf_reader = PDFReader()
docs = pdf_reader.load_data(file_path="document.pdf")
Chargeurs de base de données
from langchain.document_loaders import (
SQLDatabaseLoader,
CSVLoader
)
# Depuis une base de données SQL
loader = SQLDatabaseLoader(
query="SELECT content, metadata FROM documents",
db=database_connection
)
# Depuis un CSV
loader = CSVLoader(
file_path="data.csv",
source_column="source",
csv_args={"delimiter": ","}
)
Structure des documents
Tous les chargeurs renvoient des objets Document :
from langchain.schema import Document
# Structure du document
doc = Document(
page_content="Le contenu textuel réel...",
metadata={
"source": "document.pdf",
"page": 1,
"author": "John Doe",
"created_date": "2024-01-15"
}
)
Meilleures pratiques
| Pratique | Description |
|---|---|
| Gestion des erreurs | Toujours intercepter les erreurs de fichier introuvable et de parsing |
| Encodage | Spécifiez l'encodage UTF-8 pour les fichiers texte |
| Métadonnées | Préservez les informations source pour les citations |
| Chargement par lots | Chargez plusieurs fichiers efficacement |
# Chargement robuste avec gestion des erreurs
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
Résumé
- LangChain offre plus de 100 chargeurs pour divers formats
- LlamaIndex propose SimpleDirectoryReader pour un chargement par lots facile
- Toujours préserver les métadonnées pour l'attribution des sources
- Gérer les erreurs avec soin dans les systèmes de production
Prochaines étapes
Continuez avec Chapitre 2 : Division de texte pour apprendre les stratégies de découpage.