Cosas Interesantes

Mostrando entradas con la etiqueta PDF. Mostrar todas las entradas
martes, 3 de agosto de 2010

Más arreglos con RegEx (Expresiones Regulares) después de la conversión desde PDF a un ePUB para Mi PAPYRE 6.1 reader

Coco profesorPAPYRE STREETComo ya sabéis, los PDFs dan para mucho cuando de convertirlos a ePUB se trata, sobre todo por el tipo de “zurraspas” que nos quedan antes de lograr un ebook decente. Ya hemos comentado varios ejemplos en este BLOG (aquí y también aquí)  pero viendo estos ejemplos no he podido resistirme a preguntarle a Coco y compartir sus soluciones.
jueves, 22 de julio de 2010

Aplicamos las “BBPP de LARdT 1.0 para un ePUB decente” para la conversión de un PDF desde el principio hasta final (Cap.01)

A veces un ebook te puede volver loco Algunos lectores me han comentado que lo de las “Buenas prácticas de LARdT para un ePUB decente” (en adelante, BBPP LARdT 1.0), está muy bien pero que hablar sobre la teoría es fácil y que las complicaciones aparecen cuando se enfrenta uno a la edición y mejora de un libro en concreto. Y tienen razón. Por eso, he tomado un libro PDF (de los más antipáticos de convertir) y vamos a mostrar paso por paso las modificaciones realizadas para convertirlo en un ePUB decente.
Cómo es un poco largo no me ha quedado más remedio que dividir el contenido del POST en varios capítulos que irán publicándose diariamente (perdón por la molestia del “CONTINUARA…”).

La edición en SIGIL
Cargamos el ePUB según sale de la conversión desde PDF efectuada en CALIBRE. Por cierto, SIGIL me informa de que acaba de lanzar su actualización a la versión 0.23.
Empezamos a observar el libro y pronto encontramos un problema muy común en las conversiones desde PDF:
MUY IMPORTANTE: si copiais el código para utilizarlo en SIGIL, recordad que SIGIL admite el copiar-pegar de los retornos de carro (NEWLINE) en las cajas de texto del copiar-pegar. Debereis copiar el cambio de línea o bien sustituir en la expresión de busqueda por “(/n/s*)
Es decir, cuando copies el codigo y lo pegueis en SIGIL quedará:
image
 pero en realidad es:
image porque debemos COPIAR y PEGAR entre cada línea el RETORNO DE CARRO:
image


1. - Depuramos texto espurio (cabeceras y pies de páginas incrustados entre el texto) 
Efectivamente como podéis comprobar en la imagen encontramos encabezados con números de páginas entreverados con el texto, interrumpiendo el flujo del mismo. Podéis ver la imagen en detalle pulsando sobre ella, como siempre.
CLICK para IMAGE CLICK para IMAGE 
El código de BÚSQUEDA es:

<p class="calibre2">Valeri Massimo Manfredi</p>

<p class="calibre2">([\(\ÑñÓ/ÃÁÉÍÚáéíóúÜü¡!?¿*:«»"'-%…=–º©—“”#{(¼)\)
.,;a-zA-Z0-9\-_\s\c]*)</p>

<p class="calibre2"></p>

<p class="calibre2">([0-9]*)</p>


y no hay código de SUSTITUCIÓN porque se trata de ELIMINAR estas ocurrencias.


Seguimos eliminando ocurrencias similares pero en el caso en el que aparece el nombre del autor seguido del número de página: CLICK para IMAGE


image35 
El código de BÚSQUEDA es:


Valeri Massimo Manfredi</p>

<p class="calibre2">L o s i d u s d e m a r z o</p>

<p class="calibre2"></p>

<p class="calibre2">([0-9]*)</p>

<p class="calibre2"></p>

<p class="calibre2">

y no hay código de SUSTITUCIÓN porque se trata de ELIMINAR estas ocurrencias.


Otra variante similar, pero además cerrando la oración con un código de párrafo:


CLICK para IMAGE


image44 
El código de BÚSQUEDA es:



. Valeri Massimo Manfredi</p>

<p class="calibre2">L o s i d u s d e m a r z o</p>

<p class="calibre2"></p>

<p class="calibre2">([0-9]*)</p>


y el código de SUSTITUCIÓN:


.</p>




2. - Depuramos RETORNOS DE CARRO espúreos que dividen párrafos indebidamente:
CLICK para IMAGE image50


El código de BÚSQUEDA es:


([áéíóúa-zA-Z,;?!0-9])</p>

<p class="calibre2">([¿a-z])


y el código de SUSTITUCIÓN:


\1 \2




Y seguimos con una ligera variación sobre el mismo caso (el corte va precedido de un “Guión largo” (EMDASH):

CLICK para IMAGE
image56 
El código de BÚSQUEDA es:


([áéíóúa-zA-Z,;?!—])</p>

<p class="calibre2">([a-z¿])


y el código de SUSTITUCIÓN:


\1\2




Y aquí ha llegado el momento de parar para continuar en el CAP.02


Aplicamos las “BBPP de LARdT 1.0 para un ePUB decente” para la conversión de un PDF desde el principio hasta final (Cap.01)

A veces un ebook te puede volver loco Algunos lectores me han comentado que lo de las “Buenas prácticas de LARdT para un ePUB decente” (en adelante, BBPP LARdT 1.0), está muy bien pero que hablar sobre la teoría es fácil y que las complicaciones aparecen cuando se enfrenta uno a la edición y mejora de un libro en concreto. Y tienen razón. Por eso, he tomado un libro PDF (de los más antipáticos de convertir) y vamos a mostrar paso por paso las modificaciones realizadas para convertirlo en un ePUB decente.
Cómo es un poco largo no me ha quedado más remedio que dividir el contenido del POST en varios capítulos que irán publicándose diariamente (perdón por la molestia del “CONTINUARA…”).

La edición en SIGIL
Cargamos el ePUB según sale de la conversión desde PDF efectuada en CALIBRE. Por cierto, SIGIL me informa de que acaba de lanzar su actualización a la versión 0.23.
Empezamos a observar el libro y pronto encontramos un problema muy común en las conversiones desde PDF:
MUY IMPORTANTE: si copiais el código para utilizarlo en SIGIL, recordad que SIGIL admite el copiar-pegar de los retornos de carro (NEWLINE) en las cajas de texto del copiar-pegar. Debereis copiar el cambio de línea o bien sustituir en la expresión de busqueda por “(/n/s*)
Es decir, cuando copies el codigo y lo pegueis en SIGIL quedará:
image
 pero en realidad es:
image porque debemos COPIAR y PEGAR entre cada línea el RETORNO DE CARRO:
image


1. - Depuramos texto espurio (cabeceras y pies de páginas incrustados entre el texto) 
Efectivamente como podéis comprobar en la imagen encontramos encabezados con números de páginas entreverados con el texto, interrumpiendo el flujo del mismo. Podéis ver la imagen en detalle pulsando sobre ella, como siempre.
CLICK para IMAGE CLICK para IMAGE 
El código de BÚSQUEDA es:

<p class="calibre2">Valeri Massimo Manfredi</p>

<p class="calibre2">([\(\ÑñÓ/ÃÁÉÍÚáéíóúÜü¡!?¿*:«»"'-%…=–º©—“”#{(¼)\)
.,;a-zA-Z0-9\-_\s\c]*)</p>

<p class="calibre2"></p>

<p class="calibre2">([0-9]*)</p>


y no hay código de SUSTITUCIÓN porque se trata de ELIMINAR estas ocurrencias.


Seguimos eliminando ocurrencias similares pero en el caso en el que aparece el nombre del autor seguido del número de página: CLICK para IMAGE


image35 
El código de BÚSQUEDA es:


Valeri Massimo Manfredi</p>

<p class="calibre2">L o s i d u s d e m a r z o</p>

<p class="calibre2"></p>

<p class="calibre2">([0-9]*)</p>

<p class="calibre2"></p>

<p class="calibre2">

y no hay código de SUSTITUCIÓN porque se trata de ELIMINAR estas ocurrencias.


Otra variante similar, pero además cerrando la oración con un código de párrafo:


CLICK para IMAGE


image44 
El código de BÚSQUEDA es:



. Valeri Massimo Manfredi</p>

<p class="calibre2">L o s i d u s d e m a r z o</p>

<p class="calibre2"></p>

<p class="calibre2">([0-9]*)</p>


y el código de SUSTITUCIÓN:


.</p>




2. - Depuramos RETORNOS DE CARRO espúreos que dividen párrafos indebidamente:
CLICK para IMAGE image50


El código de BÚSQUEDA es:


([áéíóúa-zA-Z,;?!0-9])</p>

<p class="calibre2">([¿a-z])


y el código de SUSTITUCIÓN:


\1 \2




Y seguimos con una ligera variación sobre el mismo caso (el corte va precedido de un “Guión largo” (EMDASH):

CLICK para IMAGE
image56 
El código de BÚSQUEDA es:


([áéíóúa-zA-Z,;?!—])</p>

<p class="calibre2">([a-z¿])


y el código de SUSTITUCIÓN:


\1\2




Y aquí ha llegado el momento de parar para continuar en el CAP.02


domingo, 20 de junio de 2010

Arreglando la conversión de un PDF en libro ePUB para Mi PAPYRE 6.1 reader ¡con muchas notas a pie de libro!

Para hacer la conversión del título “Corsarios de Levante” partimos de un PDF quePAPYRE STREET está protegido por lo que no ha sido posible realizar las tareas de pre-proceso (recortar pies y cabeceras, revisar el reflow, etc…) típicas para conseguir una conversión sin muchos problemas. Ha sido necesario por tanto depurar pies y cabeceras que aparecían mezclados en mitad del texto y otros errores típicos en estos casos de los que ya hemos hablado en este BLOG. Pero este libro se caracteriza además por incluir casi 100 notas a pie de libro (añadidas por el editor digital de la versión PDF, no por el autor original) que aclaran muchos de los términos marineros y militares del relato. Como mejoran bastante la experiencia de lectura me parecía necesario incluirlas en la versión ePUB.

Gestionando un montón de notas
notas en PDF
En el archivo PDF, las notas aparecen originalmente como se muestra en la foto, pero después de la conversión, como podéis comprobar aparecen simplemente como un número “pegado” a la palabra en cuestión. Un auténtico desastre multiplicado por cien.

Despues de convertir
Así que se impone utilizar RegEx para arreglar este entuerto.
Empezamos a buscar una expresión de búsqueda que nos encuentre todas las ocurrencias y nada más que las ocurrencias relacionadas con este error.
Necesitamos una expresión que encuentre palabras terminadas en un número y con un espacio o signo de puntuación a continuación. Desgraciadamente si no delimitamos cuantos números estamos buscando, la expresión nos encontrará también, cosas como nombres de estilo CSS (“calibre9”, por ejemplo). Así que lo partimos en 2 tandas, primero buscaremos 1 a 1 las palabras terminadas en un digito (las notas del 1 al 9), y reemplazaremos 1 a 1 excluyendo las otras cosas que podamos encontrar; y luego ya podremos de un sólo golpe reemplazar las notas del 10 al 95 ya que no se confunden con ninguna otra cosa.

La expresión de sustitución tendrá que incluir el código para convertir ese número en una nota dentro del texto. Así pues:

CLICK para CODEComo siempre, si pulsáis en la imagen accederéis al código. 
¡Ale-hop! y …
 Arreglado
es decir, donde antes ponía:

bajando la entena1.

ahora queda:

bajando la entena. <a title="[1]" href="#_ftn1" id="_ftnref1" name="_ftnref1"><span class="MsoPie">[1]</span></a>



Pero no hemos terminado ni mucho menos. Al final del libro nos quedan varias

Coco profesor

páginas con el texto aclaratorio de las notas (son 95) que tendremos que vincular a las notas situadas dentro del texto. El problema es que para cada nota, después de copiar-pegar el código tendríamos que realizar al menos 5 modificaciones (1 para cada vez que aparece el número de la nota); por lo que estamos hablando de casi ¡500 ediciones! No puede ser.
Nuestro amigo Coco, nos sugiere que hagamos algún invento que nos ahorre este trabajo tan tedioso.

CLICK para IMAGEN  
Lo primero va a ser copiar el texto de las notas a pie de libro en un archivo de texto plano TXT, de forma que cada nota ocupe una línea con su número de nota al inicio de la línea. Con un copiar-pegar y unos cuantos retornos de carro lo hacemos muy rápidamente:


Fichero de texto con las NOTAS
Y ahora vamos a crear un programita que mediante un bucle para los valores 1 a 95, lea la frase correspondiente con el texto de la nota, le añada el código necesario para convertirlo en una nota a pie de libro y escriba el resultado en otro archivo de texto.
 CLICK para CODE

Como siempre, si pulsáis en la imagen accederéis al código. 
Como soy un tío muy rarito el programa esta hecho en KIXTART, un dialecto BASIC interprete de MICROSOFT orientado al scripting para la gestión de sistemas pero convertirlo a algo más universal, como por ejemplo VISUAL BASIC es muy sencillo porque la sintaxis es muy similar.
Resumiendo:


Para n=1 a 95, leo el archivo con el texto de las notas frase a frase hasta que encuentro la línea con la nota número n; le quito el comienzo de la línea dónde está el número de la nota para dejar sólo el texto. A ese texto le añado delante el código necesario para que sea una nota a pie de libro, cuya parte variable es el número n de la nota. Escribo la frase resultante en otro archivo de texto, donde me quedaran al final 95 líneas, una para cada nota a pie de libro.
Este es el archivo DESTINO resultante:
CLICK para CODE Por último, solo queda hacer un copiar-pegar desde este archivo a nuestro e-book en ePUB y ¡Voilá!

CLICK para IMAGE

domingo, 14 de febrero de 2010

Cómo retocar con RegEx la conversión CALIBRE desde el formato PDF y conseguir mejores ebooks en ePUB para Mi reader PAPYRE 6.1 (Cap.02)

Coco profesorEn el capítulo anterior habíamos pedido ayuda a Coco para que nos enseñara cómo arreglar los errores que se producen en la conversión de un archivo PDF hacia ePUB en CALIBRE.
Vamos a continuar utilizando RegEx para retocar el texto paraPAPYRE STREET conseguir un archivo ePUB sin errores.

ARREGLANDO LOS ERRORES MÁS HABITUALES
Los errores más habituales tienen que ver con la interrupción del flujo de texto, partiendose frases y párrafos en donde no procede.

Párrafo interrumpido por un RETORNO DE CARRO:
Retorno de carro Vemos como la frase se corta y empieza un nuevo párrafo.
La expresión de búsqueda será:
CLICK para CODE  
20091020009

He incluido las vocales acentuadas con la expresión “\()
20091020008 La expresión de sustitución es: \1 \3 Es decir, la última letra del primer párrafo, un espacio y la primera letra del segundo párrafo.
Además de seleccionar el check de “Match Case” para asegurar la diferenciación entre MAYUSCULAS y MINUSCULAS, conviene seleccionar “Minimal Matching” que asegura que se seleccionan los “segmentos” de texto más pequeños de todos aquellos que cumplen la condición de búsqueda.
Pulsamos ENTER y ¡Voilá!…
20091020010 
Carácteres espúreos al final de una frase:
CARACTERES ESPÚREOS Son números, correspondientes a la paginación del archivo PDF. En este caso, la expresión de búsqueda es sencilla:
20091020012  
Buscamos un bloque de entre 1 y 3
números (el libro no tiene más de 999 páginas) situado entre un punto “.” con un espacio detrás y una etiqueta de cierre de párrafo.
Lo sustituimos simplemente por un punto “.” seguido de la etiqueta de cierre de párrafo.
Pulsamos ENTER y “Abra-ca-dabra”…

CORREGIDO 
MÁS párrafos interrumpidos por un RETORNO DE CARRO
20091020014 ¿Pero NO HABIAMOS RESUELTO ESTE TIPO DE ERROR antes? preguntareis. Pues sí, pero NO. Porque en la expresión de búsqueda anterior no incluimos caracteres especiales cómo la coma “,” y la interrogación “¿”. Así pues nos queda cubrir los casos en los que intervienen estos caracteres que son escasos pero que en un libro de 300 y pico páginas pueden darse cerca de 50 veces. Lo resolvemos sin necesidad de RegEx, simplemente copiando la cadena a sustituir:
20091020015  Le damos al ENTER y ¡Zas!…
20091020016 
Parrafos interrumpidos por un RETORNO DE CARRO después de un guión largo
CON GUIÓN LARGO Al incluir otro tipo de carácter especial, el guión largo “” (EM Dash) también se escapó de la primera expresión de sustitución. A veces no queda más remedio que realizar este tipo de depuración “por capas de cebolla”, desde lo más general hasta los casos particulares. Aquí la expresión de búsqueda es más compleja:
CLICK para CODE
20091020018Como siempre en este caso, debemos marcar el check de “Match Case” para asegurarnos de discriminar entre MAYUSCULAS y MINUSCULAS. Pulsamos ENTER para ver la magia de RegEx en acción:
RESUELTO 
Parrafos interrumpidos por un RETORNO DE CARRO después de un guión largo cuando es un COMIENZO de FRASE
20091020020 

Ya sólo nos queda por resolver el caso más enrevesado y dificil de diferenciar del texto correcto. Es cuando después de guión largo “” (EM Dash) se rompe el párrafo; y el primer carácter del párrafo siguiente es una MAYÚSCULA, lo cual hace que sea muy dificil de distinguir de un principio de frase legítimo.
Tendremos como expresión de busqueda:


CLICK para CODE
20091020021OJO! con el “Match Case” y “Minimal Matching”; Pero aquí el truco para comprobar que efectivamente se ha roto la frase de forma incorrecta es que existe un punto “.” justo antes del guión largo “” (EM Dash); lo que indica que el mismo es el primer caracter de una nueva frase y no el último de la corriente.
Como siempre despúés de pulsar ENTER:
20091020022 
Los casos que hemos resuelto con estos retoques han eliminado cerca de 800 errores del texto, lo que supone la diferencia entre un ebook decente y una chapuza.

© Cosas Interesantes