Busca texto en múltiples PDF a la vez

Publicado el 10 marzo 2011 por Ubuntizando
Esta es una entrada realizada por nuestro redactor invitado, Pablo de UsemosLinux: Supongamos que tienes un montón de archivos PDFs desperdigados en tu disco rígido. Para hacerlo más fácil, supongamos también que todos ellos ya tienen aplicado OCR (es decir, que se puede seleccionar el texto en su interior). Buscar una frase en estos PDFs es de lo más sencillo: abres el archivo con el visor de PDFs 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 PDFs... ¡al mismo tiempo! Es ahí donde el método anterior falla porque abrir uno por uno todos tus PDFs llevaría una eternidad ¿Entonces qué? ¡Ja! ¡Comando grep al rescate!
Grep es un hermoso 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 PDFs (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 PDFs 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 PDFs 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 sólo 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 sabés 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.