Document loaders avanzados

Intermedio
LangChain
LangChain
Actualizado: 02/12/2025

TextLoader y DirectoryLoader

Los document loaders de LangChain automatizan el proceso de carga de documentos desde archivos, eliminando la necesidad de crear objetos Document manualmente. Estos loaders no solo cargan el contenido, sino que también generan automáticamente metadatos útiles como la fuente del archivo, que serán fundamentales para el sistema de retrieval.

TextLoader para archivos individuales

El TextLoader es el loader más básico y se utiliza para cargar archivos de texto plano:

from langchain_community.document_loaders import TextLoader

# Cargar un archivo de texto individual
loader = TextLoader("documentos/manual_usuario.txt")
documents = loader.load()

print(f"Documentos cargados: {len(documents)}")
print(f"Contenido: {documents[0].page_content[:200]}...")
print(f"Metadatos: {documents[0].metadata}")

El TextLoader genera automáticamente metadatos que incluyen la ruta del archivo como fuente. Esto es especialmente útil cuando necesitas rastrear de dónde proviene cada fragmento de información en tu sistema RAG.

Configuración de encoding

Uno de los aspectos importantes del TextLoader es la gestión del encoding, especialmente cuando trabajas con archivos que contienen caracteres especiales:

# Especificar encoding explícitamente
loader = TextLoader(
    "documentos/texto_espanol.txt",
    encoding="utf-8"
)
documents = loader.load()

# Para archivos con encoding automático
loader = TextLoader(
    "documentos/archivo_mixto.txt",
    autodetect_encoding=True
)
documents = loader.load()

DirectoryLoader para múltiples archivos

El DirectoryLoader permite cargar múltiples archivos de un directorio de forma eficiente:

from langchain_community.document_loaders import DirectoryLoader

# Cargar todos los archivos .txt de un directorio
loader = DirectoryLoader(
    "documentos/",
    glob="*.txt",
    loader_cls=TextLoader
)
documents = loader.load()

print(f"Total de documentos cargados: {len(documents)}")
for doc in documents:
    print(f"Archivo: {doc.metadata['source']}")

Filtrado y patrones específicos

El DirectoryLoader ofrece flexibilidad para cargar solo los archivos que necesitas mediante patrones glob:

# Cargar solo archivos con patrón específico
loader = DirectoryLoader(
    "manuales/",
    glob="manual_*.txt",
    loader_cls=TextLoader
)
documents = loader.load()

# Cargar múltiples tipos de archivo en subdirectorios
loader = DirectoryLoader(
    "documentos/",
    glob="**/*.txt",
    loader_cls=TextLoader,
    recursive=True
)
documents = loader.load()

Procesamiento con configuraciones específicas

Puedes pasar argumentos específicos al loader subyacente a través del DirectoryLoader:

# Configurar encoding para todos los archivos
loader = DirectoryLoader(
    "documentos/",
    glob="*.txt",
    loader_cls=TextLoader,
    loader_kwargs={"encoding": "utf-8", "autodetect_encoding": True}
)
documents = loader.load()

for doc in documents:
    print(f"Fuente: {doc.metadata['source']}")
    print(f"Tamaño del contenido: {len(doc.page_content)} caracteres")

Los metadatos generados automáticamente por estos loaders son fundamentales para el funcionamiento del sistema RAG, ya que permiten al usuario final saber exactamente de qué archivo proviene cada respuesta.

PyPDFLoader para PDFs

Los archivos PDF representan uno de los formatos más comunes en aplicaciones empresariales y académicas. El PyPDFLoader de LangChain está específicamente diseñado para extraer texto de documentos PDF y generar metadatos enriquecidos que incluyen información sobre páginas individuales.

Instalación y configuración básica

Antes de utilizar PyPDFLoader, necesitas instalar la dependencia correspondiente:

pip install langchain-community pypdf

Una vez instalado, puedes cargar documentos PDF de forma directa:

from langchain_community.document_loaders import PyPDFLoader

# Cargar un documento PDF
loader = PyPDFLoader("informes/reporte_anual.pdf")
documents = loader.load()

print(f"Páginas extraídas: {len(documents)}")
print(f"Primera página: {documents[0].page_content[:200]}...")
print(f"Metadatos: {documents[0].metadata}")

Metadatos enriquecidos por página

La característica más valiosa del PyPDFLoader es que divide automáticamente el PDF en documentos individuales por página, generando metadatos específicos para cada una:

loader = PyPDFLoader("manuales/manual_tecnico.pdf")
pages = loader.load()

# Examinar metadatos de cada página
for i, page in enumerate(pages[:3]):
    print(f"Página {i+1}:")
    print(f"  Fuente: {page.metadata['source']}")
    print(f"  Número de página: {page.metadata['page']}")
    print(f"  Contenido: {page.page_content[:150]}...")

Procesamiento de documentos extensos

Los PDFs empresariales suelen ser extensos, y el PyPDFLoader facilita el manejo eficiente de estos documentos:

loader = PyPDFLoader("documentos/politicas_empresa.pdf")
pages = loader.load()

# Analizar distribución de contenido
total_caracteres = sum(len(page.page_content) for page in pages)
print(f"Total de páginas: {len(pages)}")
print(f"Total de caracteres: {total_caracteres}")

# Encontrar páginas con contenido específico
termino_busqueda = "política de vacaciones"

for page in pages:
    if termino_busqueda.lower() in page.page_content.lower():
        print(f"Encontrado en página {page.metadata['page']}")

Integración con sistemas RAG

Los metadatos de página son especialmente útiles para sistemas RAG donde necesitas proporcionar referencias precisas:

from langchain_community.document_loaders import PyPDFLoader

def procesar_manual_usuario(ruta_pdf):
    """Procesa un manual de usuario en PDF para sistema RAG"""
    loader = PyPDFLoader(ruta_pdf)
    pages = loader.load()
    
    # Enriquecer metadatos con información adicional
    for page in pages:
        page.metadata['tipo_documento'] = 'manual_usuario'
        page.metadata['seccion'] = f"Página {page.metadata['page']}"
    
    return pages

manual_pages = procesar_manual_usuario("manuales/manual_software.pdf")

# Filtrar solo páginas con contenido sustancial
contenido_util = [page for page in manual_pages if len(page.page_content.strip()) > 100]

print(f"Páginas de contenido útil: {len(contenido_util)}")

La granularidad por página que proporciona PyPDFLoader es fundamental para crear sistemas RAG precisos, ya que permite a los usuarios obtener referencias exactas sobre dónde se encuentra la información en el documento original.

En la siguiente lección aprenderemos a dividir estos documentos en chunks más pequeños utilizando los Text Splitters de LangChain.

Fuentes y referencias

Documentación oficial y recursos externos para profundizar en LangChain

Documentación oficial de LangChain
Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, LangChain es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de LangChain

Explora más contenido relacionado con LangChain y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Usar TextLoader para archivos individuales, DirectoryLoader para cargar múltiples archivos, trabajar con loaders especializados (PDF, HTML, etc.), entender cómo los loaders generan metadatos automáticamente, y cargar documentos desde URLs y APIs.

Cursos que incluyen esta lección

Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje