web-dev-qa-db-fra.com

PDF Extraction de texte avec coordonnées

Je voudrais extraire le texte d'une partie (en utilisant les coordonnées) de PDF en utilisant Ghostscript.

Quelqu'un peut m'aider?

40
AMER

Oui, avec Ghostscript, vous pouvez extraire du texte de PDF. Mais non, ce n'est pas le meilleur outil pour le travail. Et non, vous ne pouvez pas le faire en "portions" (parties de pages uniques). Ce que vous pouvez faire: extraire uniquement le texte d'une certaine plage de pages.

Tout d'abord: Ghostscript'stxtwrite périphérique de sortie (pas si bon)

 gs \
   -dBATCH \
   -dNOPAUSE \
   -sDEVICE=txtwrite \
   -dFirstPage=3 \
   -dLastPage=5 \
   -sOutputFile=- \
   /path/to/your/pdf

Cela affichera tout le texte contenu aux pages 3-5 sur stdout. Si vous souhaitez une sortie dans un fichier texte, utilisez -sOutputFile=textfilename.txt.


gs Mise à jour:

Les versions récentes de Ghostscript ont vu des améliorations majeures dans le périphérique txtwrite et des corrections de bogues. Voir changelogs récents de Ghostscript (recherchez txtwrite sur cette page) pour plus de détails.


Deuxièmement: Ghostscript's ps2ascii.ps Utilitaire PostScript (mieux)

Celui-ci vous oblige à télécharger la dernière version du fichier ps2ascii.ps à partir du référentiel de code source Ghostscript Git . Vous devrez convertir votre PDF en PostScript, puis exécutez cette commande sur le fichier PS:

gs \
  -q \
  -dNODISPLAY \
  -P- \
  -dSAFER \
  -dDELAYBIND \
  -dWRITESYSTEMDICT \
  -dSIMPLE \
   /path/to/ps2ascii.ps \
   input.ps \
  -c quit

Si le paramètre -dSIMPLE N'est pas défini, chaque ligne de sortie contient des informations supplémentaires au-delà du contenu en texte pur sur les polices et la taille de police utilisées.

Si vous remplacez ce paramètre par -dCOMPLEX, Vous obtiendrez des informations supplémentaires sur les couleurs et les images utilisées.

Lisez les commentaires à l'intérieur du ps2ascii.ps pour en savoir plus sur cet utilitaire. Ce n'est pas confortable à utiliser, mais pour moi, cela a fonctionné dans la plupart des cas, j'en avais besoin ...

Troisièmement: XPDF'spdftotext Utilitaire CLI (plus confortable que Ghostscript)

Une façon plus confortable de faire l'extraction de texte: utilisez pdftotext (disponible pour Windows ainsi que Linux/Unix ou Mac OS X). Cet utilitaire est basé sur Poppler ou sur XPDF. Voici une commande que vous pouvez essayer:

 pdftotext \
   -f 13 \
   -l 17 \
   -layout \
   -opw supersecret \
   -upw secret \
   -eol unix \
   -nopgbrk \
   /path/to/your/pdf
   - |less

Cela affichera la plage de pages 13 (fpremière page) à 17 (last page), conservez la disposition d'un double mot de passe protégé nommé PDF (en utilisant les mots de passe utilisateur et propriétaire secret et supersecret ), avec la convention Unix EOL, mais sans insérer de sauts de page entre les pages PDF, redirigées vers moins ...

pdftotext -h Affiche toutes les options de ligne de commande disponibles.

Bien sûr, les deux outils ne fonctionnent que pour les parties texte des PDF (s’ils en ont). Oh, et la formule mathématique ne fonctionnera pas trop bien ... ;-)


pdftotext Mise à jour:

Les versions récentes de Poppler pdftotext ont maintenant des options pour extraire "une partie (en utilisant les coordonnées) des pages PDF" , comme l'OP demandé. Les paramètres sont:

  • -x <int>: coordonnée x du coin supérieur gauche de la zone de recadrage
  • -y <int>: coordonnée y du coin supérieur gauche de la zone de recadrage
  • -W <int>: largeur de la zone de recadrage en pixels (par défaut à 0)
  • -H <int>: hauteur de la zone de recadrage en pixels (0 par défaut)

Mieux, si utilisé avec le paramètre -layout.


Quatrièmement: la commande mutool draw De MuPDF peut également extraire du texte

L'application multiplateforme open source MuPDF (réalisée par la même société qui développe également Ghostscript) a fourni un outil en ligne de commande, mutool. Pour extraire du texte d'un PDF avec cet outil, utilisez:

mutool draw -F txt the.pdf

émettra le texte extrait dans <stdout>. Utilisez -o filename.txt Pour l'écrire dans un fichier.

Cinquièmement: la boîte à outils d'extraction de texte (TET) de PDFLib (le meilleur de tous ... mais c'est PayWare)

[~ # ~] tet [~ # ~] , la boîte à outils d'extraction de texte du pdflib = la famille de produits peut trouver les coordonnées xy du contenu textuel dans un fichier PDF (et bien plus encore). TET a une interface de ligne de commande, et c'est le plus puissant de tous les outils d'extraction de texte I ' Je suis au courant. (Il peut même gérer les ligatures ...) Citation de leur site Web:

Géométrie
TET fournit des mesures précises pour le texte, telles que la position sur la page, la largeur des glyphes et la direction du texte. Des zones spécifiques de la page peuvent être exclues ou incluses dans l'extraction de texte, par ex. ignorer les en-têtes et pieds de page ou les marges.

D'après mon expérience, même si elle ne possède pas l'interface CLI la plus simple que vous puissiez imaginer: une fois que vous vous y serez habitué, il fera ce qu'il promet de faire, pour la plupart des fichiers PDF que vous lui lancez ...


Et il y a encore plus d'options:

  1. podofotxtextract (outil CLI) du projet PoDoFo (Open Source)
  2. calibre (normalement un programme GUI pour gérer les eBooks, Open Source) a une option de ligne de commande qui peut extraire le texte des PDF
  3. AbiWord (un traitement de texte GUI, Open Source) peut importer des PDF et enregistrer ses fichiers au format .txt: abiword --to=txt --to-name=output.txt input.pdf
99
Kurt Pfeifle

Je ne suis pas sûr que GhostScript puisse accepter les coordonnées, mais vous pouvez convertir le PDF en une image et l'envoyer à un moteur OCR soit comme une sous-image recadrée à partir des coordonnées données, soit comme l'image entière le long Certaines API OCR acceptent un paramètre rectangle pour affiner la région d'OCR.

Regardez VietOCR pour un exemple de travail, qui utilise Tesseract comme moteur OCR et GhostScript comme convertisseur PDF-image.

1
nguyenq

Debenu Quick PDF Library peut extraire du texte d'une zone définie sur une page. La fonction SetTextExtractionArea vous permet de spécifier les coordonnées x et y et vous pouvez également spécifier la largeur et la hauteur de la zone.

  • Gauche = La coordonnée horizontale du bord gauche de la zone
  • Top = La coordonnée verticale du bord supérieur de la zone
  • Largeur = La largeur de la zone
  • Hauteur = La hauteur de la zone

Ensuite, la fonction GetPageText peut être appelée immédiatement après cela pour extraire le texte de cette zone définie.

Voici un exemple utilisant C # (bien que la bibliothèque soit multi-plateforme et puisse être utilisée avec de nombreux langages de programmation différents):

DPL.LoadFromFile(@"Sample.pdf", "");
DPL.SetOrigin(1); // Sets 0,0 coordinate position to top left of page, default is bottom left
DPL.SetTextExtractionArea(35, 35, 229, 30); // Left, Top, Width, Height
string ExtractedContent = DPL.GetPageText(8);
Console.WriteLine(ExtractedContent);

En utilisant GetPageText, il est également possible de renvoyer uniquement le texte situé dans cette zone ou le texte situé dans cette zone ainsi que des informations sur la police du texte telles que le nom, la couleur et la taille.

1
Rowan