IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Besoin de parser un pdf venant d'un formulaire (pas de gestion de tables)


Sujet :

Python

  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut Besoin de parser un pdf venant d'un formulaire (pas de gestion de tables)
    Bonsoir

    Je ne parviens pas à trouve un module python (3.7) qui permet de parser un document pdf provenant d'un formulaire.

    Je ne peux pas, pour des raisons de confidentialité poster le pdf, mais il faut imaginer comme une page HTML avec des cases ayant à chaque fois un titre et des valeurs.
    Exemple : une case avec une titre "Entreprise" qui contient adresse : 12 Rue Victor Hugo, Tel : xxxxxx, puis une case avec un autre titre "Facture" et plein de sous champs.
    Il ne s'agit pas de tables.

    J'ai testé de nombreux modules: pdfminer, PyPDF2, voir des modules exotiques... Ils ne remontent qu'une chaîne de caractères sans prendre en compte l'aspect hiérarchique. Chaîne contenant des délimiteurs qui sont des "\n". Bref, si dans une case il y a des "\n" pour un champs (exemple adresse sur plusieurs lignes), c'est le chaos.

    Voici un exemple de mes recherches :
    https://stackoverflow.com/questions/...to-text-python

    -> Bref, PyPDF2 retourne une chaîne (par page), je recherche un module qui retourne un dictionnaire ou une liste.


    Belle soirée

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Salut,

    Il y a longtemps j'avais utilisé pdfminer pour lire un document "structuré": des informations dans des boîtes (bbox). Les boites qui contiennent du texte sont des LTTextBox ou des LTTextLine... et ces bbox sont des rectangles qui ont position, hauteur, largeur dans la page qui permette de savoir quoi regrouper.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir !

    Tu as essayé ce genre de chose :
    Extraire une table : https://www.thepythoncode.com/articl...python-camelot
    PyPDF2 et formulaire : https://towardsdatascience.com/how-t...n-10b5e5f26f70
    Version barbare (OCR de Google) : https://codelabs.developers.google.c...er-v1-python#0

    Je suppose que tu as déjà vu ces sites auparavant ce sont les premiers que me propose Google.

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Il y a longtemps j'avais utilisé pdfminer pour lire un document "structuré": des informations dans des boîtes (bbox). Les boites qui contiennent du texte sont des LTTextBox ou des LTTextLine... et ces bbox sont des rectangles qui ont position, hauteur, largeur dans la page qui permette de savoir quoi regrouper.

    - W
    Oui, j'ai vu cela, cela me parait compliqué de paramétrer les hauteurs et largeurs.

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Bonsoir !

    Tu as essayé ce genre de chose :
    Extraire une table : https://www.thepythoncode.com/articl...python-camelot
    PyPDF2 et formulaire : https://towardsdatascience.com/how-t...n-10b5e5f26f70
    Version barbare (OCR de Google) : https://codelabs.developers.google.c...er-v1-python#0

    Je suppose que tu as déjà vu ces sites auparavant ce sont les premiers que me propose Google.
    -> J'ai testé. visiblement mon document ne contient aucune page.

    -> Cela peut me remonter une chaîne de caractère (voir on post originel) avec le mode acroform

    Version barbare (OCR de Google) : https://codelabs.developers.google.c...er-v1-python#0
    Heu, j'avoue que le terme AI me rebute.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    Bonjour,

    est-ce que tu ne gagnerais pas à préalablement convertir le pdf dans un format qui pourra être parcouru plus facilement ?
    si j'ai bien compris il s'agit de tableaux, donc
    pdf (-> txt) -> csv
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    est-ce que tu ne gagnerais pas à préalablement convertir le pdf dans un format qui pourra être parcouru plus facilement ?
    si j'ai bien compris il s'agit de tableaux, donc
    pdf (-> txt) -> csv
    ?
    si j'ai bien compris il s'agit de tableaux,
    Il ne s'agit pas de tableaux mais de formulaires.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    une page HTML avec des cases ayant à chaque fois un titre et des valeurs
    je voyais ça comme une <table> (un "tableau").
    Il ne s'agit pas de tableaux mais de formulaires.
    je n'ai rien dit alors.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par Bayard Voir le message
    Oui, j'ai vu cela, cela me parait compliqué de paramétrer les hauteurs et largeurs.
    Pas besoin de les paramétrer, on génère le document en mémoire et on va pouvoir récupérer des informations "physiques" dedans.
    Le design de tout ça est documenté ici : https://pdfminer-docs.readthedocs.io/programming.html

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Hello,
    en pièce jointe un exemple de formulaire PDF remplie. Est-ce que c'est sur ce type de formulaire que tu veux récupérer des informations.

    Nom : formulairePDF.png
Affichages : 527
Taille : 217,5 Ko


    Ami calmant, J.P
    Images attachées Images attachées

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,
    Citation Envoyé par jurassic pork Voir le message
    en pièce jointe un exemple de formulaire PDF remplie. Est-ce que c'est sur ce type de formulaire que tu veux récupérer des informations.
    Le pauvre Jurassic Pork, il a eu un accident de travail... Mais il travaille encore alors qu'il a bientôt 120 ans ??? Trop fort...

  12. #12
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Hello,
    avec ce code en utilisant mon fichier pdf exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import PyPDF2 as pypdf
    pdfobject=open('d:/temp/s6201_remplie.pdf','rb')
    pdf=pypdf.PdfReader(pdfobject)
    print(pdf.get_fields())
    print(pdf.get_form_text_fields())
    voici ce que j'obtiens :
    {'nom organisme': {'/T': 'nom organisme', '/FT': '/Tx', '/V': 'Porcinou '}, 'adresse': {'/T': 'adresse', '/FT': '/Tx', '/V': '10 rue des porcins'}, 'adresse 2': {'/T': 'adresse 2', '/FT': '/Tx', '/V': '75000 PARIS'}, 'code organisme': {'/T': 'code organisme', '/FT': '/Tx', '/Ff': 29360128, '/V': '123456789'}, 'nom': {'/T': 'nom', '/FT': '/Tx', '/Ff': 2, '/V': 'Pork'}, 'prénom': {'/T': 'prénom', '/FT': '/Tx', '/Ff': 2, '/V': 'Jurassic'}, 'date naissance': {'/T': 'date naissance', '/FT': '/Tx', '/Ff': 29360128, '/V': '01021903'}, 'adresse victime': {'/T': 'adresse victime', '/FT': '/Tx', '/V': '25 rue de la préhistoire'}, 'code postal': {'/T': 'code postal', '/FT': '/Tx', '/Ff': 29360128, '/V': '59000'}, 'num immat': {'/T': 'num immat', '/FT': '/Tx', '/Ff': 29360128, '/V': '1035959595890'}, 'clé immat': {'/T': 'clé immat', '/FT': '/Tx', '/Ff': 29360128, '/V': '29'}, 'ident employeur': {'/T': 'ident employeur', '/FT': '/Tx', '/V': 'Cochonkiri S.A'}, 'adresse employeur': {'/T': 'adresse employeur', '/FT': '/Tx', '/V': '43 rue des bêtises'}, 'code postal 2': {'/T': 'code postal 2', '/FT': '/Tx', '/Ff': 29360128, '/V': '59400'}, 'commune': {'/T': 'commune', '/FT': '/Tx', '/V': 'LILLE'}, 'commune 2': {'/T': 'commune 2', '/FT': '/Tx', '/V': 'CAMBRAI'}, 'num SIRET': {'/T': 'num SIRET', '/FT': '/Tx', '/Ff': 29360128, '/V': '23594939393939'}, 'gestion AT MP': {'/T': 'gestion AT MP', '/FT': '/Btn', '/V': '/Oui', '/Kids': [IndirectObject(62, 0, 31065760), IndirectObject(64, 0, 31065760)]}, 'date AT': {'/T': 'date AT', '/FT': '/Tx', '/Ff': 29360128, '/V': '22042022'}, 'date rechute AT': {'/T': 'date rechute AT', '/FT': '/Tx', '/Ff': 29360128}, 'date MP': {'/T': 'date MP', '/FT': '/Tx', '/Ff': 29360128}, 'date rechute MP': {'/T': 'date rechute MP', '/FT': '/Tx', '/Ff': 29360128}, 'lésion': {'/T': 'lésion', '/FT': '/Tx', '/V': 'bobo'}, 'siège lésion': {'/T': 'siège lésion', '/FT': '/Tx', '/V': "sur l'oreille"}, 'num AT MP': {'/T': 'num AT MP', '/FT': '/Tx', '/Ff': 29360128}}

    {'nom organisme': 'Porcinou ', 'adresse': '10 rue des porcins', 'adresse 2': '75000 PARIS', 'code organisme': '123456789', 'nom': 'Pork', 'prénom': 'Jurassic', 'date naissance': '01021903', 'adresse victime': '25 rue de la préhistoire', 'code postal': '59000', 'num immat': '1035959595890', 'clé immat': '29', 'ident employeur': 'Cochonkiri S.A', 'adresse employeur': '43 rue des bêtises', 'code postal 2': '59400', 'commune': 'LILLE', 'commune 2': 'CAMBRAI', 'num SIRET': '23594939393939', 'date AT': '22042022', 'date rechute AT': None, 'date MP': None, 'date rechute MP': None, 'lésion': 'bobo', 'siège lésion': "sur l'oreille", 'num AT MP': None}
    Ami calmant, J.P

  13. #13
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Merci Monsieur Pork.

    J'ai testé mes fichiers pdf avec PyPDF2 (même code) et j'ai Je teste tabula.

  14. #14
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Hello,
    Citation Envoyé par Bayard Voir le message
    J'ai testé mes fichiers pdf avec PyPDF2 (même code) et j'ai
    Si cela ne fonctionne pas c'est peut-être que ton formulaire pdf est de type xfa.
    Ami calmant, J.P

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. API C/C++ pour parser des PDF
    Par TheGzD dans le forum C++
    Réponses: 6
    Dernier message: 20/07/2011, 21h23
  2. [PHP 5.2] PDF venant d'un webservice
    Par madevilts dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2011, 15h59
  3. Réponses: 0
    Dernier message: 05/11/2009, 18h12
  4. besoin aide - parser HTML - BeautifulSoup
    Par romses2 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 20/07/2007, 14h42
  5. Parser XML -> PDF
    Par ebaynaud dans le forum Modules
    Réponses: 2
    Dernier message: 12/10/2004, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo