Convertir un notebook de Jupyter a texto — gratis y privado

Convierte un notebook .ipynb en texto plano desde tu navegador. Quita la envoltura JSON, las imágenes incrustadas y los metadatos de celda para dejar solo el código y el texto.

Cuaderno de Jupyter a texto plano: extracción sin andamiaje

El texto plano es el destino correcto cuando al otro lado no hay ninguna opinión sobre el formato. Una tubería de grep, un diff, un índice de búsqueda, un control de plagio, un correo en texto simple a un compañero que no quiere adjuntos: ninguno de estos usos gana nada con acentos graves y almohadillas, y a varios los empeora activamente una puntuación que significa algo para un motor de representación y nada para quien lee.

Este conversor toma un .ipynb y devuelve las palabras y el código, sin marcado añadido. Las celdas quedan separadas por líneas en blanco. El código aparece como código, sin delimitar. Los resultados impresos aparecen bajo la celda que los produjo, con una simple etiqueta Output:. Todo lo que el formato JSON envuelve alrededor de ese contenido se descarta. El trabajo ocurre en esta pestaña.

El argumento de los tokens

La razón más común para aplanar un cuaderno es que algo más adelante cobra por token y un .ipynb en crudo es una forma cara de decir muy poco. La proporción merece concretarse.

Un cuaderno de treinta celdas, la mitad de ellas produciendo un gráfico, ocupa habitualmente dos o tres megabytes en disco. La prosa y el código que contiene quizá sean ocho kilobytes. Todo lo demás son datos de imagen en base64, duplicados en HTML de resultados que también existen en texto plano, y contabilidad por celda. Darle el archivo crudo a un modelo no solo cuesta cien veces más de lo que debería: suele fallar directamente, porque la ventana de contexto se llena de caracteres que no llevan información.

Peor todavía: el base64 se tokeniza fatal. El texto corriente ronda los cuatro caracteres por token. Una secuencia base64 aleatoria no ofrece subcadenas repetidas al vocabulario del tokenizador, así que se acerca más a un token por cada dos caracteres. La parte más inútil del archivo es también la que tiene peor relación entre tokens y caracteres. El contador de arriba muestra el número de tokens del resultado, para que veas lo que realmente estás enviando.

Qué sobrevive al aplanado

Quitar la estructura no es lo mismo que quitar el significado, y en esa frontera se decide si una herramienta así sirve o no. Lo que se conserva:

  • El contenido de las celdas markdown, tal cual. Los caracteres # y ** se quedan, porque en una celda markdown son la única indicación de énfasis y jerarquía de la que dispone quien escribe. Quitarlos aplanaría hasta el texto indiferenciado un documento que ya era prosa.
  • El código, exactamente como se tecleó. Indentación conservada, comentarios intactos. El significado de Python depende de los espacios iniciales: no es una decisión de estilo.
  • Los resultados textuales. Salidas impresas, valores devueltos, vistas previas de dataframes en su forma de texto plano.
  • Los nombres de error, los mensajes y las trazas, despojados de los códigos de color de la terminal.
  • Las celdas en crudo, que suelen contener LaTeX o reStructuredText que quien escribía quería dejar en paz.

Lo que se va: las cargas de imagen y vídeo, los adjuntos PDF, el gemelo HTML de cualquier resultado que también exista como texto, los contadores de ejecución, los identificadores de celda, los objetos de metadatos vacíos y las celdas sin nada dentro. Una celda que solo contiene espacios y no tiene salida no es una celda que nadie necesite leer.

La cuestión de la marca de figura

Cuando se quita un gráfico, o se marca el hueco o no se marca. El compromiso es real. No dejar nada y el texto se lee limpio, pero una frase del tipo «como muestra el gráfico anterior» ya no remite a nada. Dejar una marca y has añadido una línea que casi no lleva información.

Por defecto se deja una línea corta que nombra el tipo de medio, y el interruptor de arriba la desactiva. Hay una sutileza relacionada que conviene conocer: matplotlib emite una representación textual junto a la imagen, y siempre es algo como <Figure size 640x480 with 1 Axes>. Conservada sin más, obtienes esa línea y la marca una detrás de otra, diciendo dos veces lo mismo. Cuando se ha quitado una figura, ese texto concreto se suprime.

El truncado por el medio

Algunas salidas son largas porque son informativas y otras porque un bucle imprimió dentro. La herramienta no puede distinguirlas, así que pone un tope a cada salida y corta por el medio, conservando el principio y el final e indicando cuántos caracteres han desaparecido.

Truncar por el medio gana a la alternativa por una razón concreta: las dos partes más informativas de una salida larga son casi siempre el principio, que muestra la forma de lo producido, y el final, que muestra dónde acabó. Un dataframe truncado por la cola te enseña las primeras filas y esconde la línea de resumen. Truncado por la cabeza esconde los nombres de columna. Cortar el medio conserva los dos extremos de la historia.

Para qué sirve en la práctica un cuaderno aplanado

Unas cuantas cosas se vuelven más fáciles una vez desaparecido el JSON. Comparar dos versiones de un cuaderno en texto plano muestra qué cambió en el análisis y no qué contadores de ejecución se incrementaron: si nbdime existe es precisamente porque un git diff normal sobre un .ipynb es ilegible. Buscar en una carpeta de cuadernos la función que construyó un gráfico vuelve a ser un grep normal. Contar palabras para un informe, pasar un cuaderno a una herramienta de síntesis de voz o pegar una metodología en un documento que no representa Markdown: todo funciona sin más limpieza.

La privacidad, y por qué aquí es estructural

Los cuadernos son documentos de trabajo, y los documentos de trabajo acumulan lo que nadie pensaba conservar: un token pegado mientras se depuraba una API, una cadena de conexión, veinte filas de datos de clientes impresas para verificar una fusión. Entregar eso a un servicio de conversión es entregar todo lo que haya dentro.

El analizador de aquí es JavaScript ejecutándose en esta pestaña. Tu archivo lo lee el navegador, se convierte en memoria y se muestra. No hay subida, así que no hay política de conservación que creerse ni eliminación que solicitar. Si prefieres bloques de código delimitados y títulos Markdown, el conversor de cuaderno a Markdown hace eso con la misma garantía.