Comment rechercher un fichier PDF à partir de la ligne de commande?

26

Je vérifie les références d'un papier et je veux trouver les positions dans le corps où du papier (dans la liste des références) est référencé. Existe-t-il un éditeur PDF qui prend en charge la recherche via bash et extrait le contexte d'une position? J'ai essayé de convertir un PDF en texte, mais je n'ai pas obtenu un bon résultat.

David
la source

Réponses:

22

Juste pour ajouter à la réponse ci-dessus, en particulier, vous pouvez utiliser un outil en ligne de commande à partir de xpdf-utils appelé pdftotext puis rechercher le document texte créé par cet outil avec grep.

Cela pourrait ressembler à ceci:

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

Il y a plus d'informations dans le manuel. Le seul inconvénient de pdftotext est que vous ne pouvez pas nous globaliser pour transformer plusieurs fichiers en même temps. Ce problème peut être résolu avec un petit script bash:

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

Si vous rencontrez des problèmes pour créer un document texte à partir d'un pdf en raison, par exemple, d'un fichier pdf incompatible, c'est un autre problème.

Je pense qu'en général, les éditeurs de pdf n'incluent pas de lignes de commande car ils sont graphiques. Si vous souhaitez utiliser bash (ou peut-être zsh!), Vous devrez peut-être utiliser un shell de terminal.

Bonne chance!

Joe
la source
20

poppler-utils

Remarque: xpdf-utils est un package de transition pour poppler-utils.

Vous pouvez utiliser des poppler-utils. poppler-utils est une suite d'outils pour les fichiers PDF (Portable Document Format).

Pour l'installer, vous pouvez utiliser le Centre logiciel Ubuntu, ou en cliquant ci-dessous:

Installer des poppler-utils

pdfgrep

pdfgreppeut rechercher une chaîne ou un modèle dans des fichiers PDF de manière récursive dans les arborescences de répertoires, en comptant les correspondances ou en imprimant un certain contexte pour chaque correspondance. Par exemple, pour effectuer une recherche récursive keyworddans /some directory, insensible à la casse:

pdfgrep -Ri keyword /some/directory

Pdfgrep est un outil pour rechercher du texte dans des fichiers PDF. Il fonctionne de manière similaire à `grep '.

Fonctionnalités:

  • rechercher des expressions régulières.
  • prise en charge de certaines options grep importantes, notamment: + sortie du nom de fichier. + sortie du numéro de page. + insensibilité à la casse en option. + compter les
    occurrences.
  • et la caractéristique la plus importante: la sortie couleur!

Installer pdfgrep

1 Source: Répertoire des applications Ubuntu

Mitch
la source
6

Pour rechercher une expression régulière dans plusieurs fichiers pdf à l'aide de pdfgrep:

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

où chemin est l'emplacement de vos fichiers pdf.

enflammer
la source
0

La raison pour laquelle pdftotext n'a pas réussi est peut-être que les PDF sont des images numérisées et que vous devez les OCR, j'ai écrit un moyen rapide de rechercher tous les pdfs qui ne peuvent pas être grepédités et de les OCR.

J'ai remarqué que si un pdffichier n'a pas de police, il n'est généralement pas consultable. Sachant cela, nous pouvons l'utiliser pdffonts.

Les 2 premières lignes du pdffontssont l'en-tête du tableau, donc quand un fichier est consultable a plus de deux lignes de sortie, sachant cela, nous pouvons créer:

gedit check_pdf_searchable.sh

collez ceci

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

puis le rendre exécutable

chmod +x check_pdf_searchable.sh

puis répertoriez tous les fichiers PDF non consultables dans le répertoire:

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

ou dans le répertoire et ses sous-répertoires:

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

Vous devez également installer:

sudo apt install ocrmypdf
Eduard Florinescu
la source