Pular para o conteúdo principal

Encontrar texto em arquivos pdf

Problema: Você tem zilhões de artigos (papers) em pdf mas quer saber se uma certa sequência de texto (palavra ou frase) está escrita neles. Por exemplo, suponhamos que a frase a ser pesquisada é "fitting"

Solução 1: via pdfgrep (mais recomendada)

    No terminal de comandos, (trocando "richard" pelo seu nome do usuário), digite:

$  find ~ -name '*.pdf' -exec pdfgrep -H -i 'fitting' {} \;

Para indicar quantas ocorrências em cada pdf:

find ~ -name '*.pdf' -exec pdfgrep  -c -H -i 'fitting' {} \; | awk -v FS=":" -v OFS="\t" '$2>0 { print $2, $1 }' | sort -hr

Para mostrar somente a primeira ocorrência no pdf:


$  find ~ -name '*.pdf' -exec pdfgrep -H -i -m 1 'fitting' {} \;

Solução 2: via pdftotext

    Nota: pode apresentar mensagens de erro quando há problemas na conversão para texto
    No terminal de comandos digite:

$  find ~ -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep -H --label="{}" --color "fitting"' \; 

Um exemplo de resultado é exibido na figura seguinte:


Se você quiser mostrar somente a primeira ocorrência no arquivo pdf:

$  find ~/Downloads -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep  -H -m 1 --label="{}" --color "fitting"' \;

Para exibir somente o número de vezes o padrão pesquisado aparece nos arquivos pdf:

find ~ -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep  -o -H -c --label="{}" --color "plot"' \;

Obs: para instalar os pacotes necessários, em distribuição baseada no Debian (Debian, Ubuntui, Mint etc) use:

$  sudo apt-get install pdftotext pdfgrep

Comentários

Postagens mais visitadas deste blog

Matemática no terminal de comandos

Precisa fazer um cálculo rápido sem ter que abrir nenhuma aplicação gráfica como, por exemplo, uma planilha de cálculo? O terminal de comandos do Linux é ideal para esses casos. Para cálculos com ponto flutuante usando somente o terminal de comandos temos diversas opções como o comando bc , por exemplo. O comando bc (basic calculator) é utilizado para cálculos com precisão arbitrária e possui a vantagem de já vir instalado em qualquer distribuição Linux, portanto, sem a necessidade de instalar nada! Além do bc, as linguagens de programação de modo geral são ricas em recursos matemáticos e algumas podem ser executadas interativamente no terminal.  Neste artigo mostraremos exemplos de cálculos usando o bc , gnuplot , Python , Scilab, R , Julia, bash e zsh . Operadores matemáticos Para realizarmos os cálculos, precisamos saber a sintaxe básica e que símbolos são usados para representar os operadores matemáticos. Soma, subtração, mu...

O incrível sed - stream editor

sed é um editor extremamente eficiente usado para realizar transformações de texto. Se você está precisando substituir uma palavra ou expressão, que ocorre várias vezes ao longo de um arquivo de texto, pode pensar em usar o comando "Localizar e Substituir" normalmente presente em qualquer programa para edição desses arquivos. Mas se o problema é que você tem datas no formato mm-dd-yyyy (mês-dia-ano) e precisa trocar para o formato dd/mm/yyyy (dia/mês/ano), a ferramenta de Localizar e Substituir não vai ajudar pois: São várias datas com dias, meses e anos variados; A ordem mês - dia mudará para dia - mês. Essa tarefa que é praticamente impossível para os editores comuns, o sed faz isso com os "pés nas costas". Vamos conhecê-lo um pouco? Seções Que tal uma mãozinha! Sintaxe Áreas de transferência Fluxo normal de funcionamento do sed Regexp Classes de caracteres Caracteres de escape Resumo dos comandos 'sed' Principai...

jpeg ou jpg? doc ou docx?

Problema : Você quer encontrar um arquivo de imagem mas está em dúvida se sua extensão é jpg ou jpeg (ou poderia ser um documento do Word mas com a extensão doc ou docx ). Como encontrar arquivos somente com essas extensões? Solução 1)     No terminal de comandos digite (usando o exemplo de arquivo em jpg ou jpeg): $  find /home/richard/ | grep -i ".jpg$\|.jpeg$" Solução 2)     No caso específico de jpg e jpeg, pode-se usar ainda: $  find /home/richard/ | grep -i ".jp*g$" Solução 3)     No terminal de comandos digite: $  find /home/richard/ -iname "*.jpg" -o -iname "*.jpeg"