Busca texto en múltiples PDF a la vez

>

Esta es una entrada realizada por nuestro redactor invitado, Pablo, de UsemosLinux:

Supongamos que tienes un montón de archivos PDF desperdigados en tu disco rígido. Para hacerlo más fácil, supongamos también que todos ellos ya tienen aplicadoOCR (es decir, que se puede seleccionar el texto en su interior). Buscar una frase en estos PDF es de lo más sencillo: abres el archivo con el visor de PDF y buscas lo que quieres. Pero, ¿qué ocurre cuando quieres buscar esa frase y no recuerdas en qué PDF la leíste? Bueno, no queda otra que buscar en todos tus PDF… ¡al mismo tiempo! Es ahí donde el método anterior falla porque abrir uno por uno todos tus PDF llevaría una eternidad. ¿Entonces qué? ¡Ja! ¡Comando Grep al rescate!
Grep es un comando que nos permite buscar en el contenido de los archivos. Esta funcionalidad es muy similar a la que incorporan Nautilus, Dolphin y tantos otros exploradores de archivos. No obstante, todos ellos comparten una limitación: no pueden buscar muy bien dentro de los archivos binarios (como los PDFs, DOCs, ODTs, etc.).

Su utilización típica es muy sencilla.

grep -i -n -r 'mi frase' /mi/ruta/para/buscar

En el ejemplo anterior utilizo 3 parámetros muy comunes:
-i ignora mayúsculas y minúsculas
-n muestra el número de línea en la que se encontró una coincidencia
-r buscar en forma recursiva dentro del directorio

Para más información, siempre está disponible grep –help o man grep.

Teniendo esto en cuenta, el comando para buscar nuestra frase en todos los PDF (que tengan OCR aplicado) dentro de la carpeta ~/usemoslinux/pdfs es el siguiente:

grep -i -n -r 'blog usemos linux' ~/usemoslinux/pdfs
Si tenemos suerte, aparecerá una lista de los archivos en los que se encontraron coincidencias. Lo único que resta, ahora sí, es abrir esos archivos uno por uno y buscar la frase en cuestión con el visor de PDF predeterminado.

Grep y algo más: pdftotext

Para realizar una búsqueda más detallada dentro de cada PDF, es posible usar el comando pdttotext. En caso de que no lo tengas instalado, basta con escribir el siguiente comando:

sudo apt-get install poppler-utils
Esta herramienta hace lo que su nombre promete: convierte PDFs a archivos de texto. De ese modo, grep podrá buscar más fácilmente y arrojar resultados más detallados.

Para buscar una frase en todos los PDF del directorio actual es preciso convertirlos primero y después pasarles grep para buscar las coincidencias. Eso se consigue escribiendo lo siguiente en un terminal:

for i in *.pdf; do echo $i; pdftotext "$i" - |grep -i -n 'frase'; done

Donde frase es, obviamente, la frase que quieres buscar.

La ventaja de este método respecto del anterior es que ahora no solo nos va a mostrar un listado de los archivos en los que se encontraron coincidencias, sino también las líneas completas e incluso los números de las líneas en las que se encontraron dichas coincidencias.

Nota: este método no sirve para buscar en PDFs que no tengan aplicado OCR por la sencilla razón de que esos PDFs no son más que un saco de imágenes. Es por eso que no es posible seleccionar el texto en un PDF sin OCR, mucho menos se puede buscar dentro de ellos. ¿Todavía no sabes cómo aplicar OCR a un documento escaneado?

Entrada realizada por: Pablo
Puedes seguirle en:
http://usemoslinux.blogspot.com,
Twitter o Facebook.

¿Quieres ayudarnos? ¿Tienes algún truco que comentar? ¿Noticia relevante? ¿Quieres escribir en este blog? Es fácil.
Comparte esta entrada: