REGEX, ExtracPDF, et dictionnaire

REGEX, ExtracPDF, et dictionnaire - Python - Programmation

Marsh Posté le 04-03-2019 à 23:19:41    

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
Reply

Marsh Posté le 04-03-2019 à 23:19:41   

Reply

Marsh Posté le 06-03-2019 à 21:16:03    

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
Reply

Marsh Posté le 07-03-2019 à 09:36:49    

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.
Reply

Marsh Posté le 10-03-2019 à 21:51:35    

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
Reply

Marsh Posté le 14-03-2019 à 09:29:03    

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
Reply

Marsh Posté le 16-03-2019 à 16:51:25    

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)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed