Cargar datos en LangChain es el primer paso para indexar información y prepararla para tareas de recuperación o generación aumentada. Con los document loaders puedes transformar archivos como PDFs, CSVs, Excels o HTML en objetos document con su page_content y metadata, listos para usarse en pipelines de IA.
¿Qué hace un document loader en LangChain?
Un document loader convierte fuentes externas en objetos estructurados que LangChain entiende. Cada document contiene dos atributos clave: el page_content, que es el texto, y la metadata, que describe el origen y otros datos útiles.
LangChain trae integraciones listas para múltiples formatos, así que rara vez necesitas escribir un loader desde cero. Aun así, puedes crear el tuyo cuando necesitas controlar cómo se arma la metadata.
- Texto plano y archivos
.txt.
- PDFs y documentos Word.
- CSVs, Excels y HTML.
- Directorios completos con muchos archivos.
- Fuentes menos obvias como imágenes o chats de Facebook.
¿Qué es un document en LangChain? Es un objeto con dos partes: page_content (el texto) y metadata (información sobre la fuente, página, autor, etc.). Es el formato estándar que usan los pipelines de indexación.
¿Cómo cargar un PDF como texto no estructurado?
Los PDFs entran en la categoría de datos no estructurados, igual que un Word o un .txt. Para tratarlos así, LangChain ofrece UnstructuredFileLoader dentro de document_loaders [01:00].
Primero instalas la librería unstructured, de la que depende LangChain. Después importas el loader, le pasas el path del PDF y llamas a load() para obtener tus datos.
python
from langchain.document_loaders import UnstructuredFileLoader
loader = UnstructuredFileLoader("mi_archivo.pdf")
data = loader.load()
¿Qué devuelve UnstructuredFileLoader?
La variable data es una lista, pero con una particularidad: aunque tu PDF tenga 18 páginas, todo el contenido queda comprimido en un solo document [02:30]. Si revisas su metadata, encontrarás solo la llave source con el path del archivo.
El page_content arranca con el texto completo del PDF, sin separación por páginas. Esto sirve cuando quieres procesar el documento como un bloque, pero limita lo que puedes hacer con metadatos más ricos como autor o número de página.
¿Cómo dividir un PDF página por página con PyPDFLoader?
Cuando necesitas que cada página viva en su propio document, usas PyPDFLoader [03:30]. Este loader te da granularidad y agrega metadatos útiles como el número de página.
Antes de correr el código instalas pypdf, ya que LangChain lo usa por debajo. Después la lógica es prácticamente idéntica a la del loader anterior.
python
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("mi_archivo.pdf")
data = loader.load()
¿Qué cambia en el resultado?
Ahora data es una lista con 18 elementos, uno por cada página del PDF [04:15]. Cada document tiene su propio page_content, por ejemplo unos 2200 caracteres en la página 17, y una metadata enriquecida.
La metadata incluye dos llaves: source, con el path del archivo, y page, con el número de página. Es como un libro: sabes en qué página estás y de qué trata ese fragmento.
¿Cuándo uso UnstructuredFileLoader y cuándo PyPDFLoader? Usa UnstructuredFileLoader si quieres todo el texto en un solo bloque y trabajas con formatos variados (Word, txt, HTML). Usa PyPDFLoader cuando necesitas dividir un PDF por páginas y conservar el número de página en la metadata.
¿Por qué importa la metadata al indexar documentos?
La metadata es lo que te permite rastrear de dónde viene cada fragmento cuando tu modelo responde una pregunta. Sin ella, pierdes la trazabilidad y la capacidad de citar fuentes.
Con PyPDFLoader ya obtienes source y page automáticamente. Si necesitas más campos, como autor, fecha o categoría, tendrás que escribir tu propia clase loader que defina cómo se arman page_content y metadata según tus reglas.
source: el archivo o URL de origen.
page: número de página, útil en PDFs.
- Campos personalizados: autor, sección, idioma, fecha de publicación.
Como reto práctico, sube un documento Word y pártelo en varios documents, uno por cada página. La documentación de LangChain en los recursos de la clase te muestra el loader específico para .docx. ¿Qué loader usaste y qué metadata extra te gustaría agregar? Cuéntalo en los comentarios.