Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
967 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  REGEX, ExtracPDF, et dictionnaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

REGEX, ExtracPDF, et dictionnaire

n°2329995
daniel-12
Posté le 04-03-2019 à 23:19:41  profilanswer
 

Bonsoirje débute en python, depuis..1semainej'ai programmé des choses en VBA que je voudrais refaire en Python
Le but de mon outil est de :-lire et extraire le texte d'un PDF-lister des mot correspondant a une trame-comparer ces mots a un dictionnaire pour savoir s'ils sont bien ecrits et avoir des information dessus
 
Dans un premier temps, j'ai créé une boite de dialogue, qui me rempli une liste avec les lignes d'un fichier texte contenant un mot.
Ce que je voudais faire  faire pour la suite, c'est lister les mot correspondant a une pattern regex
vous l'écririez comment ?

Code :
  1. #!/usr/local/bin/python3
  2. import tkinter
  3. def lister():
  4.     liste.delete(0, tkinter.END)
  5.     with open ("liste.txt","r";) as fic:
  6.         for ligne in fic:
  7.             if 'toto' in ligne:
  8.                 liste.insert(tkinter.END, ligne)
  9. def effacer():
  10.     liste.delete(10, tkinter.END)
  11. root = tkinter.Tk()
  12. #root.resizable
  13. root.title('Test listes...')
  14. root.geometry("500x500";)
  15. liste = tkinter.Listbox(root, width=80, height=25)
  16. liste.grid(row=0, column=0, padx=15, pady=15)
  17. frameButton = tkinter.Frame(root)
  18. buttonLister = tkinter.Button(frameButton, text="Lister", command=lister)
  19. buttonQuitter = tkinter.Button(frameButton, text="Quitter", command=root.destroy)
  20. buttonEffacer = tkinter.Button(frameButton, text="Effacer", command=effacer)
  21. buttonLister.grid(row=0, column=0)
  22. buttonQuitter.grid(row=0, column=1)
  23. buttonEffacer.grid(row=0, column=2)
  24. frameButton.grid(row=1, column=0, padx=15, pady=15)
  25. root.mainloop()


Message édité par daniel-12 le 05-03-2019 à 08:30:21
mood
Publicité
Posté le 04-03-2019 à 23:19:41  profilanswer
 

n°2330064
daniel-12
Posté le 06-03-2019 à 21:16:03  profilanswer
 

Bonsoir.J'ai un peu avancé et fait ce code en utilisant les expressions régulières

Code :
  1. import re
  2.     regex = r"[DdEe]d+[.|-]{0,1}d+[.|-]{0,1}d+"
  3.     with open ("liste.txt","r";) as fic:
  4.         for test_str in fic:
  5.             texte_trouve = re.findall(regex, test_str)
  6.                 print (texte_trouve)


Cela me trouve bien ce que je veux, mais ça me mets aussi les strings vides, pourquoi, comment l'écrire un peu mieux ?
[]
[]
[]
['D53230075']
['D532.30075.000']
[]
[]
[]
[]
[]
[]
[]


Message édité par daniel-12 le 06-03-2019 à 21:16:50
n°2330078
MaybeEijOr​Not
but someone at least
Posté le 07-03-2019 à 09:36:49  profilanswer
 

Bonjour,
 
Tu lis ton fichier ligne par ligne, à chaque ligne tu fais donc une recherche d'expression régulière et tu stockes la réponse dans une variable (text_trouve). Même quand rien n'est trouvé, il faut bien que ta fonction de recherche retourne quelque chose, ne serait-ce pour te dire qu'elle n'a rien trouvé.
 
Il te suffit de stocker les résultats non vides dans une autre variable.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2330292
daniel-12
Posté le 10-03-2019 à 21:51:35  profilanswer
 

Code :
  1. # coding: utf-8
  2. import tkinter
  3. import re
  4. import PyPDF2
  5. def lister():
  6.     liste.delete(0, tkinter.END)
  7.     F_PDF = open('NC2.pdf', 'rb')  # <=== lz PDF
  8.     F_TXT = open('extract.txt', 'w')  # <=== le txt
  9.     pdfreader = PyPDF2.PdfFileReader(F_PDF)
  10.     for pag_num in range(pdfreader.numPages):
  11.         pageobj = pdfreader.getPage(pag_num)
  12.         F_TXT.write(pageobj.extractText())
  13.     F_TXT.close()
  14.     F_PDF.close()
  15.     with open ("extract.txt","r",) as fic:
  16.         for test_str in fic:
  17.             r1 = re.findall(r"[F]d+[.|-| ]{0,1}d+[.|-| ]{0,1}d+ ", test_str)
  18.             if len(r1)==1:
  19.                 liste.insert(tkinter.END, r1)


Bonsoir. J'ai avancé et j'arrive a extraire un PDF en TXT, puis j'arrive aussi a extraire des séquences genre F123-13245-123 de mon texte. Mais j'ai un soucis
 
Le premier c'est extraction du PDF en TXT, sur certain PDF ca ne marche pas...L'auriez vous déjà fait, avec des code plus efficaces
le deuxieme, est l'extraction via re.findall sur le fichier TXT généré, mon code ne marche pas.par contre si j'édite le TXT ca marche. et sur d'autre fichier txt issue de pdf mais extrait différement ca marcheVous avez une idée ?


Message édité par daniel-12 le 10-03-2019 à 22:08:47
n°2330398
vente7950
Easy & Fast
Posté le 14-03-2019 à 09:29:03  profilanswer
 

Hello,
Il y a PyPDF3 qui existe maintenant, mais je lui préfère quand même pdfminer
J'ai pas vraiment compris ton problème avec ta regex


---------------
Agence ZM - Création de sites vitrines pour artisans et entrepreneurs
n°2330484
daniel-12
Posté le 16-03-2019 à 16:51:25  profilanswer
 

Salut
le problème est résolu pour la partie regex
javais oublié au début de mettre
 if len(r1)==1:
du coup j'avais les chaines vides qui remontaient
 
 
pour la partie PDF, le code que j'ai mis avec PyPDF2 fonctionne mais il est sensible au document qu'il doit traiter.
j'ai trouvé une solution avec un programme externe pdftotext
https://www.xpdfreader.com/
 
et un collègue m'a fourni une version avec pdfminer
 
si je veux rester a 100% en python, quel extracteur pdf=>txt vous me conseillez (d'après votre expérience)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  REGEX, ExtracPDF, et dictionnaire

 

Sujets relatifs
Peux-t'on filtrer le résultat d'un groupe via une regex ?Regex PHP (new line)
Regex pour remplacement de &Aide pour regex
Aide sur une regexRegex : capturer toutes les itérations d'un groupe capturant +
ecrire chaine utf8 json à partir d'un dictionnaireMéthode pour placer tous les mots du dictionnaire dans une phrase.
filtre avec REGEXRegex Split tableau
Plus de sujets relatifs à : REGEX, ExtracPDF, et dictionnaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR