Como pesquiso um arquivo PDF na linha de comando?

26

Estou verificando as referências de um artigo e quero encontrar as posições no corpo em que algum artigo (na lista de referências) é referenciado. Existe um editor de PDF que suporte a pesquisa via bash e extraia o contexto de uma posição? Tentei converter PDF em texto, mas não obtive um bom resultado.

David
fonte

Respostas:

22

Apenas para adicionar à resposta acima, em particular, você pode usar uma ferramenta de linha de comando do xpdf-utils chamada pdftotext e, em seguida, pesquisar no documento de texto criado por essa ferramenta com grep.

Isso pode ser algo como isto:

pdftotext document.pdf - | grep -C5 -n -i "search term"

Há mais informações no manual. A única desvantagem do pdftotext é que você não pode transformar-se em vários arquivos ao mesmo tempo. Esse problema pode ser superado com um pequeno script bash:

for f in pdf_directory; do echo $f; pdftotext $f - | grep -i "search_term"; done

Se você está tendo problemas para criar um documento de texto a partir de um pdf devido a, por exemplo, um arquivo pdf incompatível, esse é outro problema.

Penso que, em geral, os editores de pdf não incluem linhas de comando porque são gráficos. Se você deseja usar o bash, (ou talvez o zsh!), Pode ser necessário usar um shell de terminal.

Boa sorte!

Joe
fonte
20

poppler-utils

Nota: xpdf-utils é um pacote de transição para poppler-utils.

Você pode usar poppler-utils. O poppler-utils é um conjunto de ferramentas para arquivos Portable Document Format (PDF).

Para instalá-lo, você pode usar o Ubuntu Software Center, ou clicando abaixo:

Instale poppler-utils

pdfgrep

pdfgreppode pesquisar uma sequência ou um padrão em arquivos PDF recursivamente em árvores de diretório, contando correspondências ou imprimindo algum contexto para cada correspondência. Por exemplo, para pesquisar recursivamente keywordem /some directory, maiúsculas e minúsculas:

pdfgrep -Ri keyword /some/directory

Pdfgrep é uma ferramenta para pesquisar texto em arquivos PDF. Funciona de forma semelhante ao grep.

Recursos:

  • procure expressões regulares.
  • suporte para algumas opções importantes de grep, incluindo: + saída do nome do arquivo. + saída do número da página. + insensibilidade opcional ao caso. + contar
    ocorrências.
  • e a característica mais importante: saída em cores!

Instale o pdfgrep

1 Fonte: Diretório de Aplicativos Ubuntu

Mitch
fonte
6

Para procurar uma expressão regular em vários arquivos pdf usando o pdfgrep:

find /path -iname '*.pdf' -exec pdfgrep -H 'pattern' {} \;

onde path é o local para seus arquivos pdf.

inflamar
fonte
0

O motivo pelo qual o pdftotext não teve êxito pode ser o fato de os PDF serem imagens digitalizadas e você precisar registrá-las. Escrevi uma maneira rápida de pesquisar todos os arquivos pdfque não podem ser grepeditados e registrá-los.

Percebi que se um pdfarquivo não tem nenhuma fonte, geralmente ele não é pesquisável. Sabendo disso, podemos usar pdffonts.

As primeiras 2 linhas do pdffontssão o cabeçalho da tabela; portanto, quando um arquivo é pesquisável, tem mais de duas linhas de saída, sabendo disso, podemos criar:

gedit check_pdf_searchable.sh

cole isso

#!/bin/bash 
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
ocrmypdf "$1" "$1"_ocr.pdf
fi

então torne-o executável

chmod +x check_pdf_searchable.sh

em seguida, liste todos os PDFs não pesquisáveis ​​no diretório:

ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}

ou no diretório e seus subdiretórios:

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} ./check_pdf_searchable.sh {}

Você também precisa instalar:

sudo apt install ocrmypdf
Eduard Florinescu
fonte