web-dev-qa-db-fra.com

Comment extraire des données d'un fichier PDF tout en gardant une trace de sa structure?

Mon objectif est d'extraire le texte et les images d'un fichier PDF tout en analysant sa structure. Les possibilités d'analyser la structure ne sont pas exhaustives; il me suffit de pouvoir identifier les en-têtes et les paragraphes.

J'ai essayé plusieurs choses différentes, mais je ne suis pas allé très loin dans aucune d'entre elles:

  • Convertir PDF en texte. Cela ne fonctionne pas pour moi car je perds des images et la structure du document.
  • Convertir PDF en HTML. J'ai trouvé quelques outils qui m'ont aidé avec cela, et le meilleur jusqu'à présent est pdftohtml. L'outil est vraiment très bon en termes de présentation, mais je n'ai pas pu analyser correctement le code HTML.
  • Convertir PDF en XML. Comme ci-dessus.

Quelqu'un a-t-il des suggestions sur la façon de résoudre ce problème?

21
Marcel

Il n'y a essentiellement pas de solution simple de copier-coller parce que PDF n'est pas vraiment très intéressé par la structure. Il y a beaucoup d'autres réponses sur ce site qui vous diront des choses beaucoup plus en détail, mais celui-ci devrait vous donner les points principaux:

Si l'identification de la structure du texte dans les documents PDF est si difficile, comment les lecteurs PDF le font-ils si bien?

Si vous voulez le faire dans PDF lui-même (où vous auriez la majorité du contrôle sur le processus), vous devrez parcourir tout le texte des pages et identifier les en-têtes en regardant leur propriétés du texte (polices utilisées, taille par rapport à l'autre texte de la page, etc ...).

En plus de cela, vous devrez également identifier les paragraphes en regardant le positionnement des fragments de texte, les espaces blancs sur la page, la proximité de certaines lettres, mots et lignes ... PDF par lui-même) n'a même pas de concept pour un "mot", encore moins des "lignes" ou des "paragraphes".

Pour compliquer encore les choses, la façon dont le texte est dessiné sur la page (et donc l'ordre dans lequel il apparaît dans le fichier PDF lui-même) n'a même pas besoin d'être le bon ordre de lecture ( ou ce que nous, les humains, considérons comme un bon ordre de lecture).

11

Vous pouvez utiliser l'approche suivante comme celle-ci avec iTextSharp ou d'autres bibliothèques open source:

  • Lisez le fichier PDF avec avec iTextSharp ou des outils open source similaires et collectez tous les objets texte dans un tableau (ou convertissez PDF en HTML en utilisant l'outil comme pdftohtml puis analyser HTML)
  • Triez tous les objets texte par coordonnées afin de les avoir tous ensemble
  • Ensuite, parcourez les objets et vérifiez la distance entre eux pour voir si 2 objets ou plus peuvent être fusionnés en un paragraphe ou non

Ou vous pouvez utiliser l'outil commercial comme ByteScout PDF Extractor SDK qui est capable de faire exactement cela:

  • extraire du texte et des images avec l'analyse de la mise en page du texte
  • XML ou CSV où les objets texte sont fusionnés ou divisés en paragraphes à l'intérieur d'une grille de disposition virtuelle
  • accéder aux objets via une API spéciale qui permet d'adresser chaque objet via son index "virtuel" de ligne et de colonne sans tenir compte de la façon dont il est stocké dans le PDF d'origine.

Avertissement: je suis affilié à ByteScout

3
Eugene

L'analyse des PDF pour les en-têtes et leurs sous-contenus est vraiment très difficile (cela ne signifie pas que c'est impossible) car PDF est disponible en différents formats. Mais j'ai récemment rencontré un outil nommé [~ # ~] grobid [~ # ~] qui peut aider dans ce scénario. Je sais que ce n'est pas parfait mais si nous fournissons une formation appropriée, il peut atteindre nos objectifs.

Grobid disponible en open source sur github.

https://github.com/kermitt2/grobid

2
Vaibhav Panmand

Les fichiers PDF peuvent être analysés avec tabula-py ou tabula-Java.

J'ai fait un tutoriel complet sur la façon d'utiliser tabula-py sur cet article . Vous pouvez également tabuler dans un navigateur Web tant que vous avez installé Java.

1
Eric Kim

À moins que ce ne soit du contenu marqué, PDF n'a pas de structure .... Vous devez le "deviner" ce que font les différents outils. Il y a un bon billet de blog expliquant les problèmes à http://blog.idrsolutions.com/2010/09/the-easy-way-to-discover-if-a-pdf-file-contains-structured-content/

0
markee174