Capítulo 1: Cargadores de Documentos
Introducción
Los cargadores de documentos son el punto de entrada de cualquier pipeline de RAG. Extraen el contenido de texto de varios formatos y fuentes, preparándolo para su procesamiento posterior.
Cargadores de Documentos en LangChain
LangChain proporciona más de 100 cargadores de documentos para diferentes fuentes:
Cargadores de PDF
from langchain.document_loaders import (
PyPDFLoader,
PDFPlumberLoader,
PyMuPDFLoader,
UnstructuredPDFLoader
)
# Carga básica de PDF
loader = PyPDFLoader("document.pdf")
documents = loader.load()
# Para mejor extracción de tablas
loader = PDFPlumberLoader("document.pdf")
documents = loader.load()
# Para PDFs escaneados (con OCR)
loader = UnstructuredPDFLoader(
"scanned.pdf",
mode="elements",
strategy="ocr_only"
)
Texto y Markdown
from langchain.document_loaders import (
TextLoader,
UnstructuredMarkdownLoader
)
# Texto plano
loader = TextLoader("readme.txt", encoding="utf-8")
docs = loader.load()
# Markdown con estructura
loader = UnstructuredMarkdownLoader("docs.md")
docs = loader.load()
Contenido Web
from langchain.document_loaders import (
WebBaseLoader,
UnstructuredURLLoader,
RecursiveUrlLoader
)
# Página única
loader = WebBaseLoader("https://example.com/docs")
docs = loader.load()
# Múltiples URLs
loader = UnstructuredURLLoader(urls=[
"https://example.com/page1",
"https://example.com/page2"
])
# Rastrear todo el sitio
loader = RecursiveUrlLoader(
url="https://docs.example.com",
max_depth=3
)
Documentos de Office
from langchain.document_loaders import (
Docx2txtLoader,
UnstructuredWordDocumentLoader,
UnstructuredPowerPointLoader,
UnstructuredExcelLoader
)
# Documentos Word
loader = Docx2txtLoader("report.docx")
docs = loader.load()
# PowerPoint
loader = UnstructuredPowerPointLoader("presentation.pptx")
docs = loader.load()
# Excel
loader = UnstructuredExcelLoader("data.xlsx")
docs = loader.load()
Lectores de LlamaIndex
LlamaIndex ofrece SimpleDirectoryReader y lectores especializados:
from llama_index import SimpleDirectoryReader
from llama_index.readers import PDFReader, DocxReader
# Cargar todo un directorio
reader = SimpleDirectoryReader(
input_dir="./documents",
recursive=True,
exclude_hidden=True,
required_exts=[".pdf", ".docx", ".txt"]
)
documents = reader.load_data()
# Lector específico
pdf_reader = PDFReader()
docs = pdf_reader.load_data(file_path="document.pdf")
Cargadores de Bases de Datos
from langchain.document_loaders import (
SQLDatabaseLoader,
CSVLoader
)
# Desde base de datos SQL
loader = SQLDatabaseLoader(
query="SELECT content, metadata FROM documents",
db=database_connection
)
# Desde CSV
loader = CSVLoader(
file_path="data.csv",
source_column="source",
csv_args={"delimiter": ","}
)
Estructura del Documento
Todos los cargadores devuelven objetos Document:
from langchain.schema import Document
# Estructura del documento
doc = Document(
page_content="The actual text content...",
metadata={
"source": "document.pdf",
"page": 1,
"author": "John Doe",
"created_date": "2024-01-15"
}
)
Buenas Prácticas
| Práctica | Descripción |
|---|---|
| Manejo de errores | Siempre capture errores de archivo no encontrado y de análisis |
| Codificación | Especifique codificación UTF-8 para archivos de texto |
| Metadatos | Preserve la información de origen para citas |
| Carga por lotes | Cargue múltiples archivos de manera eficiente |
# Carga robusta con manejo de errores
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
Resumen
- LangChain ofrece más de 100 cargadores para diversos formatos
- LlamaIndex proporciona SimpleDirectoryReader para carga por lotes sencilla
- Siempre preserve los metadatos para la atribución de la fuente
- Gestione los errores adecuadamente en sistemas de producción
Próximos Pasos
Continúe con Capítulo 2: División de Texto para aprender sobre estrategias de fragmentación.