Printdown

Convertir PDF, Word y diapositivas a Markdown para IA y RAG

Por ·

Los asistentes como ChatGPT, Claude o Gemini pueden trabajar con documentos largos, pero la respuesta nunca será mejor que el texto que reciben. Si copias texto desde un visor de PDF, obtienes un salto de línea al final de cada renglón, palabras cortadas por guiones, números de página en mitad de las frases y tablas convertidas en una ristra de celdas. Convertir antes el archivo a Markdown te da un texto limpio que conserva la estructura del documento y que puedes revisar y recortar antes de enviarlo a ningún sitio. Aquí verás qué esperar de cada tipo de archivo, cómo limpiar el resultado y cómo usarlo en prompts y en RAG.

Por qué Markdown es un buen formato de entrada

  • La estructura se mantiene. Títulos, listas y tablas se marcan con unos pocos caracteres normales (##, -, |), así que la jerarquía del documento sigue ahí, como texto.
  • Poco relleno. HTML envuelve cada elemento en etiquetas y atributos; Markdown marca la misma estructura con uno o dos caracteres, así que casi todo lo que envías es contenido.
  • Los títulos sirven de asideros. Puedes pedirle al modelo que se centre en «la sección Excepciones», que cite el título que ha usado o cortar el archivo por títulos para la recuperación.

Qué esperar de cada tipo de archivo

Abre Cualquier archivo a Markdown y suelta un archivo. El resultado aparece en un cuadro de texto editable con los botones Copiar, Descargar .md y Abrir en el editor → PDF.

PDF

El conversor de PDF reconstruye párrafos, títulos y tablas a partir del diseño de la página, y deduce los títulos por el tamaño de letra. Los encabezados y números de página que se repiten en todas las páginas suelen eliminarse, aunque la primera copia de un encabezado puede quedarse al principio del archivo. Las palabras cortadas con guion al final de un renglón salen separadas, como con- tratos. Los diseños a varias columnas o muy maquetados necesitan más limpieza, y las imágenes no se extraen.

Word

El conversor de Word conserva títulos, negritas, cursivas, listas, tablas, enlaces y notas al pie, y también lee los .doc antiguos. Los títulos solo se detectan si el documento usa estilos de título: una línea de texto grande en negrita sigue siendo un párrafo en negrita. El estilo Título y el Título 1 de Word se convierten ambos en #, y los encabezados y pies de página definidos en Word no se incluyen. (Si el documento va a GitHub y no a un chat, consulta Convertir un documento de Word en un README de GitHub).

PowerPoint, con las notas del orador

El conversor de PowerPoint procesa las diapositivas en orden. Los títulos de diapositiva se convierten en encabezados ##, las viñetas en listas, las tablas en tablas Markdown y las notas del orador se añaden como una cita después de su diapositiva:

## Por qué cambiar los precios

- Las cuentas pequeñas se dan de baja a los 90 días

- Los planes por usuario confunden a los compradores

  - La competencia incluye el onboarding

> Menciona las tres ventas perdidas. No más de dos minutos.

Una diapositiva sin marcador de título no tiene encabezado, así que su texto acaba bajo el título de la diapositiva anterior. Los gráficos y SmartArt no se convierten.

Excel, CSV y EPUB

El conversor de Excel convierte cada hoja en una tabla, con un encabezado ## Nombre de la hoja cuando hay varias. Las celdas contienen el último valor calculado, no la fórmula, con el formato de número de la celda (5% y no 0.05). Los archivos CSV usan la primera línea como encabezado, sea cual sea el separador. Un EPUB se convierte en un único archivo en orden de lectura, con los títulos de capítulo; los libros con DRM no se pueden leer.

Las tablas largas son fáciles de malinterpretar, tanto para las personas como para los modelos: pega solo las filas que necesites y comprueba las cifras clave con el original.

Lista de limpieza antes de pegar

Lee el texto convertido una vez de principio a fin y corrige esto:

  • Encabezados y texto de relleno: un encabezado repetido al principio, una portada, avisos de confidencialidad, un índice. El índice son títulos sin contenido: ruido en el prompt y fragmentos inútiles en una base de conocimiento.
  • Números de página sueltos o líneas tipo «Página 3 de 12» dentro de un párrafo.
  • Palabras partidas. Haz clic en Abrir en el editor → PDF, haz clic en el panel de Markdown y pulsa Ctrl+F (Cmd+F en Mac). Marca regexp, busca (\p{Ll})- (\p{Ll}) y sustituye por $1$2. Revisa las coincidencias una a una: franco-alemán cortado justo en su guion, o «pre- y posguerra», deben conservarlo.
  • Falsos títulos: líneas en negrita que en realidad son títulos de sección. Ponles ## delante.
  • Tablas rotas: compara las tablas del PDF con el original. Si alguna no tiene arreglo, cópiala en una hoja de cálculo, guárdala como CSV y convierte ese archivo.
  • Imágenes: deja Incluir imágenes desactivado cuando trabajes con IA, para que cada imagen se sustituya por su texto alternativo. Si lo activas, el .md descargado incrusta las imágenes en base64: largas ristras de caracteres que llenan el contexto y no le dicen nada a un modelo de texto. Si un gráfico importa, descríbelo en una frase.
  • Todo lo que el modelo no necesite, como anexos, textos legales o datos personales.

Un resultado típico de un PDF, tal como sale del conversor:

Revisión trimestral del negocio · Confidencial

# Revisión del tercer trimestre

## Ingresos

Las ventas crecieron salvo en el noreste, donde se aplazaron dos con- tratos.

Y después de limpiarlo:

# Revisión del tercer trimestre

## Ingresos

Las ventas crecieron salvo en el noreste, donde se aplazaron dos contratos.

Prompts que aprovechan la estructura

Pon primero el documento, entre delimitadores claros, y después tus instrucciones y tu pregunta. Pedir el título de la sección hace que cada respuesta sea fácil de comprobar:

Responde usando solo el documento de abajo. Si la respuesta no está
en él, dilo. Después de cada respuesta, indica el título de la sección
que has usado.

<documento>
# Política de reembolsos
## Quién puede pedir un reembolso
…
</documento>

Pregunta: ¿Puede un cliente empresarial pedir un reembolso pasados 45 días?

Otros patrones que sacan partido al Markdown:

  • Sección por sección: «Resume cada sección ## en dos viñetas y conserva los títulos».
  • Notas del orador: «Las líneas que empiezan por > son notas del orador. Convierte cada diapositiva y sus notas en un párrafo de un informe escrito».
  • Comparaciones: pega dos documentos, cada uno bajo su propio título #, y pide una tabla con las diferencias.
  • Archivos largos: si un documento no cabe en un mensaje, envíalo sección ## a sección en lugar de cortarlo al azar.

Dividir el Markdown en fragmentos para RAG

Las herramientas de generación aumentada por recuperación (RAG) guardan cada documento en muchos fragmentos pequeños y solo le pasan al modelo los que encajan con la pregunta. Un fragmento que empieza a mitad de un tema y acaba a mitad del siguiente encaja mal; los títulos son puntos de corte naturales.

  • Corta en los títulos ##; si una sección es muy larga, vuelve a cortarla en los ### o entre párrafos.
  • No cortes nunca dentro de una tabla, una lista o un bloque de código. Si tienes que partir una tabla larga, repite la fila de encabezado.
  • Guarda con cada fragmento su ruta de títulos (Política de reembolsos > Excepciones) para que tenga sentido por sí solo.
  • Conserva el nombre del archivo y la fecha como metadatos, para que las respuestas puedan remitir a la fuente.
  • En las presentaciones suele funcionar un fragmento por diapositiva.

Muchos frameworks de RAG y herramientas de bases de conocimiento traen su propio divisor de Markdown o por títulos; las mismas reglas valen para ellos. Si el tuyo no lo tiene, este script de Python (solo usa la biblioteca estándar) imprime una línea JSON por sección:

import json, re, sys

def split_by_headings(md, max_level=2):
    """Corta el Markdown en los títulos hasta max_level (2 = # y ##)."""
    chunks, path, buf, in_code = [], [], [], False

    def flush():
        text = "\n".join(buf).strip()
        if text and not re.fullmatch(r"#{1,6}\s+.+", text):  # omite secciones vacías
            chunks.append({"section": " > ".join(t for _, t in path), "text": text})

    for line in md.splitlines():
        if line.lstrip().startswith(("```", "~~~")):
            in_code = not in_code
        m = None if in_code else re.match(r"(#{1,6})\s+(.+)", line)
        if m and len(m.group(1)) <= max_level:
            flush()
            level = len(m.group(1))
            path = [(l, t) for l, t in path if l < level] + [(level, m.group(2).strip())]
            buf = [line]
        else:
            buf.append(line)
    flush()
    return chunks

name = sys.argv[1]
with open(name, encoding="utf-8") as f:
    for chunk in split_by_headings(f.read()):
        print(json.dumps({"source": name, **chunk}, ensure_ascii=False))

Guárdalo como split_md.py y ejecuta python split_md.py informe.md > fragmentos.jsonl. Como el estilo Título y el Título 1 de Word se convierten ambos en #, cambia antes los # sobrantes por ## si quieres que el título del documento aparezca en todas las rutas.

Privacidad: qué se queda en tu dispositivo

La conversión se ejecuta dentro de la pestaña del navegador con WebAssembly; el archivo nunca se sube. Eso cambia en cuanto pegas el texto: a partir de ahí va al servicio de IA que uses, con sus propias condiciones. Convertir primero te deja ver cada palabra que vas a compartir y borrar nombres, números de cuenta o secciones enteras antes de enviarlo.

Límites y solución de problemas

  • Los PDFs escaneados necesitan OCR, que el conversor no hace. Un mensaje te indica las páginas afectadas; añade una capa de texto con una aplicación de OCR y luego convierte.
  • Los archivos con contraseña deben desbloquearse en la aplicación original; los libros con DRM no se pueden convertir.
  • Los archivos de más de 50 MB se rechazan. Divide el documento o exporta una versión más ligera.
  • Un archivo cada vez: no hay conversión por lotes. Convierte cada documento y pégalos en un único archivo, cada uno bajo su propio título #.
  • «El archivo es demasiado complejo para convertirlo de forma segura en el navegador» significa que se ha alcanzado un límite de seguridad; prueba con partes más pequeñas.
  • Un orden de lectura desordenado en un PDF suele deberse a columnas o cuadros de texto flotantes. Si tienes el Word o el PowerPoint original, convierte ese archivo: su estructura se lee directamente en lugar de deducirse de la posición en la página.

Más guías