Aller au contenu principal

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​

PratiqueDescription
Gestion des erreursToujours intercepter les erreurs de fichier introuvable et de parsing
EncodageSpécifiez l'encodage UTF-8 pour les fichiers texte
MétadonnéesPréservez les informations source pour les citations
Chargement par lotsChargez 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.