Saltar al contenido principal

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ácticaDescripción
Manejo de erroresSiempre capture errores de archivo no encontrado y de análisis
CodificaciónEspecifique codificación UTF-8 para archivos de texto
MetadatosPreserve la información de origen para citas
Carga por lotesCargue 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.