Inicio > Introduction, Master en Software Libre > Copiar de un PDF y pegar solo la chicha. Fácil con GNU/Linux

Copiar de un PDF y pegar solo la chicha. Fácil con GNU/Linux

Estoy siguiendo un curso de R básico de autoaprendizaje on-line y se se sigue un libro de texto en PDF donde hay abundante código listo para copiar y pegar con el ratón. El problema es que al hacerlo, además de los comandos se copian también otros caracteres que no interesan, en concreto los > y los + de comienzo de línea. Además, aparecen molestas líneas en blanco que complican aún más el arreglo a mano de lo que pegamos.

En resumen, cuando uno trata de copiar del PDF por ejemplo lo siguiente:

> xyplot(height_m ~ dbh_cm | species, panel = function(x,
+     y, …) {
+     panel.xyplot(x, y)
+     panel.abline(lm(y ~ x), col = “blue”)
+     panel.abline(hd_lm_1, col = “darkgreen”)
+     if (sum(!is.na(y)) > 2) {
+         panel.loess(x, y, span = 1, col = “red”)
+     }
+ }, subset = species != “”, xlab = “Dbh (cm)”,
+     ylab = “Height (m)”, data = ufc)

Lo que en realidad copia (y es lo que pegaría) es esto:

> xyplot(height_m ~ dbh_cm | species, panel = function(x,
+
y, …) {
+
panel.xyplot(x, y)
+
panel.abline(lm(y ~ x), col = “blue”)
+
panel.abline(hd_lm_1, col = “darkgreen”)
+
if (sum(!is.na(y)) > 2) {
+
panel.loess(x, y, span = 1, col = “red”)
+
}
+ }, subset = species != “”, xlab = “Dbh (cm)”,
+
ylab = “Height (m)”, data = ufc)

Por lo que habría que arreglarlo para que quedara así:

xyplot(height_m ~ dbh_cm | species, panel = function(x,
y, …) {
panel.xyplot(x, y)
panel.abline(lm(y ~ x), col = “blue”)
panel.abline(hd_lm_1, col = “darkgreen”)
if (sum(!is.na(y)) > 2) {
panel.loess(x, y, span = 1, col = “red”)
}
}, subset = species != “”, xlab = “Dbh (cm)”,
ylab = “Height (m)”, data = ufc)

La solución “clásica” es hacerlo a mano, pero resulta que hay otra solución aún más fácil y rápida: el uso del potentísimo y elegante sed y de un editor que ejecute comandos externos. Utilizaremos gedit en nuestro ejemplo, pero cualquier otro apropiado es igual de válido.

El programa sed, en esencia, toma un texto y … hace virguerías con él. Por ejemplo, lo siguiente es suficiente para resolver nuestro problema:

sed -e :a -e ‘$!N;s/+\n/    /;ta’ -e ‘P;D’ | sed -e ‘s/^\+//g’ -e ‘s/^> //’

Ahora basta con incorporar esta funcionalidad a nuestro editor, de forma que baste copiar el texto descuajaringado, ejecutar el programa sed (con un atajo de teclado o usando el ratón) y el texto queda arreglado y listo para copiar y pegar donde nos interese.

Preparar gedit

1. Abrir el programa gedit (editor de GNOME) y desplegar el menú de Herramientas y el de Herramientas Externas.

gedit

2. Pulsar el botoncito [+] que está en la esquina inferior izquierda para añadir la nueva herramienta, que va a consistir en el programita en sed.

gedit

3.Le ponemos nombre a la herramienta, y la llamamos por ejemplo “Arregla Pegar”.  Copiamos el código que hemos visto antes en el campo de edición. El programa en sed ocupa únicamente una línea, como vemos en la imagen. A continuación le añadimos un atajo de teclado (esto es muy útil, ya que nos permite ejecutar el programa instantáneamente). En nuestro caso hacemos clic en el campo del atajo de teclado y pulsamos Alt y p a la vez, aunque podemos elegir otra combinación apropiada. Ya sólo queda en el campo Entrada decirle Documento actual y en el campo Salida que Reemplace el documento actual. Ya podemos pulsar el botón Cerrar para salir.

gedit

Ya está listo para usarlo a discreción.

Copiar código R del PDF y arreglarlo gracias a gedit

1. Los símbolos que están rodeados en rojo son los que nos dan los problemas… Hacemos como si no nos importara: seleccionamos el texto (el que nos interesa y el que se nos cuela) con el ratón, pulsamos el botón derecho y le damos a “copiar“.

PDF con código

2.Pegamos el texto en el editor gedit (con Control-v es lo más rápido), y pulsamos nuestro atajo de teclado (Alt-P). Inmediatamente el texto se arregla. También podemos utilizar el ratón, como vemos en la imagen siguiente, aunque es más lento que el atajo de teclado.

gedit

3. Como vemos el resultado es el que queríamos. Ahora ya está listo para copiar y pegar y que funcione.

gedit

Es evidente que con pequeñas modificaciones en el código del sed, lo podemos aplicar a otros muchos casos en los que nos interese retocar algo que copiamos para eliminar o añadir caracteres antes de pegarlos en su ubicación prevista.

El sagaz y orgulloso lector tiene la posibilidad de utilizar los comentarios para exponer sus propuestas y sus soluciones.

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: