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 :

Extraire le contenu d'un .pdf en Python


Sujet :

Python

  1. #21
    Membre actif
    Homme Profil pro
    Data science
    Inscrit en
    Mai 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Data science
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 16
    Par défaut
    Bonjour ,
    ci dessous mon code, j'ai du mal a faire une boucle sur les fichiers et lire juste les premieres pages de mes fichiers pdf. Si le mot que je recherche se trouve dans la premiere page du pdf, la valeur 'partenaire' est renseigné dans le fichier excel avec un 'OK' à coté et je passe au pdf suivant. Je suis débutant donc je bloque un peuu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
        path_extraction_folder = "C:/Users/xxxxx/yyyyyy/pdf"
        list_path = glob.glob(path_extraction_folder+"/**/*.pdf",recursive=True)
     
        cpt = 0
        for path in list_path:
            path_base = "/".join(str(path).replace("\\","/").split("/")[:-1])
            new_path = os.path.join(path_base, str(cpt)+".pdf")
            os.rename(path, new_path)
            cpt +=1
     
        partenaires = [x.split("\\")[1] for x in list_path]
        type_doc = [x.split("\\")[2] for x in list_path]
        nom_fichier = [x.split("\\")[-1] for x in list_path]
     
        df_files = pd.DataFrame()
        df_files["partenaire"] = partenaires
        df_files["nom dossier"] = type_doc
        df_files["nom fichier"] = nom_fichier
        df_files.to_excel("./files-tree_.xlsx",index=False)
     
        df_files = pd.read_excel("./files-tree_.xlsx")
        df_files["partenaire"] = df_files["partenaire"].apply(lambda x : 
        str(x).rjust(14,'0'))
     
        #Here is my issue, I want to do a loop on the 'partenaire' of my df_file but idk 
        #how
     
        path = file_path
        pdf = pyPdf.PdfFileReader(open(path, "rb"))
        fp = file(path, 'rb')
        num_of_pages = pdf.getNumPages()
        extract = ""
        for i in range(num_of_pages):
          inside = [i]
          pagenos=set(inside)
          rsrcmgr = PDFResourceManager()
          retstr = StringIO()
          codec = 'utf-8'
          laparams = LAParams()
          device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
          interpreter = PDFPageInterpreter(rsrcmgr, device)
          password = ""
          maxpages = 0
          caching = True
          text = ""
          for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, 
        password=password,caching=caching, check_extractable=True):
            interpreter.process_page(page)
            text = retstr.getvalue()
            text = text.decode("ascii","replace")
            if re.search(r"PLAN D'EPARGNE EN ACTIONS|PLAN D'EPARGNE EN 
        ACTIONS)",text.lower()):
                print text
                extract = extract + text + "\n" 
                continue

    Merci d'avance

  2. #22
    Membre actif
    Homme Profil pro
    Data science
    Inscrit en
    Mai 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Data science
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 16
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Il suffit juste de reprendre le code que j'ai mis plus haut et de remplacer la ligne qui faut par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for page in pdf_reader.pages:[3]
    puis de boucler sur les différents fichiers.
    Bonjour ,
    ci dessous mon code, j'ai du mal a faire une boucle sur les fichiers et lire juste les premieres pages de mes fichiers pdf. Si le mot que je recherche se trouve dans la premiere page du pdf, la valeur 'partenaire' est renseigné dans le fichier excel avec un 'OK' à coté et je passe au pdf suivant. Je suis débutant donc je bloque un peu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
        path_extraction_folder = "C:/Users/xxxxx/yyyyyy/pdf"
        list_path = glob.glob(path_extraction_folder+"/**/*.pdf",recursive=True)
     
        cpt = 0
        for path in list_path:
            path_base = "/".join(str(path).replace("\\","/").split("/")[:-1])
            new_path = os.path.join(path_base, str(cpt)+".pdf")
            os.rename(path, new_path)
            cpt +=1
     
        partenaires = [x.split("\\")[1] for x in list_path]
        type_doc = [x.split("\\")[2] for x in list_path]
        nom_fichier = [x.split("\\")[-1] for x in list_path]
     
        df_files = pd.DataFrame()
        df_files["partenaire"] = partenaires
        df_files["nom dossier"] = type_doc
        df_files["nom fichier"] = nom_fichier
        df_files.to_excel("./files-tree_.xlsx",index=False)
     
        df_files = pd.read_excel("./files-tree_.xlsx")
        df_files["partenaire"] = df_files["partenaire"].apply(lambda x : 
        str(x).rjust(14,'0'))
     
        #Here is my issue, I want to do a loop on the 'partenaire' of my df_file but idk 
        #how
     
        path = file_path
        pdf = pyPdf.PdfFileReader(open(path, "rb"))
        fp = file(path, 'rb')
        num_of_pages = pdf.getNumPages()
        extract = ""
        for i in range(num_of_pages):
          inside = [i]
          pagenos=set(inside)
          rsrcmgr = PDFResourceManager()
          retstr = StringIO()
          codec = 'utf-8'
          laparams = LAParams()
          device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
          interpreter = PDFPageInterpreter(rsrcmgr, device)
          password = ""
          maxpages = 0
          caching = True
          text = ""
          for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, 
        password=password,caching=caching, check_extractable=True):
            interpreter.process_page(page)
            text = retstr.getvalue()
            text = text.decode("ascii","replace")
            if re.search(r"PLAN D'EPARGNE EN ACTIONS|PLAN D'EPARGNE EN 
        ACTIONS)",text.lower()):
                print text
                extract = extract + text + "\n" 
                continue

  3. #23
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Je ne comprends rien au code ci-dessus et à aucun endroit je vois les conseils que j'ai donnés.
    Bonne semaine.

  4. #24
    Membre actif
    Homme Profil pro
    Data science
    Inscrit en
    Mai 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Data science
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 16
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Je ne comprends rien au code ci-dessus et à aucun endroit je vois les conseils que j'ai donnés.
    Bonne semaine.
    J'ai apporté quelques commentaires a mon code. Pour avoir une vue globale voila l'arborescence de mon repertoire:
    pdf/folder(id_partenaire)/folder_type de fichier(CTO ou PEA)/fichier_pdf (docstream.pdf)
    Exp: Pdf/0012455420/CTO/juniore.pdf

    Je sais pas si c'est plus explicite comme ca

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
        #Chemin ou sont stockés mes fichiers. Dans le repertoire pdf j'ai plusieurs dossiers avec des id_partenaire qui contienne chacun un pdf
        path_extraction_folder = "C:/Users/xxxxx/yyyyyy/pdf"
        list_path = glob.glob(path_extraction_folder+"/**/*.pdf",recursive=True)
     
        #je met en place un compteur qui va compter le nombre des fichiers pdf contu dans mon dossier pdf
        cpt = 0
        for path in list_path:
            path_base = "/".join(str(path).replace("\\","/").split("/")[:-1])
            new_path = os.path.join(path_base, str(cpt)+".pdf")
            os.rename(path, new_path)
            cpt +=1
     
        #Les dossiers contenus dans le dossier pdf est renonommé avec les id_partenaire, ensuite ces dossiers contiennent des fichiers (CTO ou PEA) qui eux contiennent les fichiers pdf à analyser
        partenaires = [x.split("\\")[1] for x in list_path]
        type_doc = [x.split("\\")[2] for x in list_path]
        nom_fichier = [x.split("\\")[-1] for x in list_path]
     
        df_files = pd.DataFrame()
        df_files["partenaire"] = partenaires
        df_files["nom dossier"] = type_doc
        df_files["nom fichier"] = nom_fichier
        df_files.to_excel("./files-tree_.xlsx",index=False)
     
        #Ici j'ai cree mon fichier Excel qui contient le id_partenaire, le type de dossier (PEA,CTO) et le nom du pdf en lui meme   
        df_files = pd.read_excel("./files-tree_.xlsx")
        df_files["partenaire"] = df_files["partenaire"].apply(lambda x : 
        str(x).rjust(14,'0'))
     
        #Mon probleme ici c'est de faire une boucle sur les fichiers pdf en ne lisant que la premiere page,
        #en recherchant 2 mots ("PLAN D'EPARGNE EN ACTIONS" ou "COMPTE TITRES ORDINAIRE")
        #Puis aller mettre un KO ou un OK dans mon fichier excel si les fichiers pdf contiennent ces mots 
     
        path = file_path
        pdf = pyPdf.PdfFileReader(open(path, "rb"))
        fp = file(path, 'rb')
        num_of_pages = pdf.getNumPages()
        extract = ""
        for i in range(num_of_pages):
          inside = [i]
          pagenos=set(inside)
          rsrcmgr = PDFResourceManager()
          retstr = StringIO()
          codec = 'utf-8'
          laparams = LAParams()
          device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
          interpreter = PDFPageInterpreter(rsrcmgr, device)
          password = ""
          maxpages = 0
          caching = True
          text = ""
          for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, 
        password=password,caching=caching, check_extractable=True):
            interpreter.process_page(page)
            text = retstr.getvalue()
            text = text.decode("ascii","replace")
            if re.search(r"PLAN D'EPARGNE EN ACTIONS|COMPTE TITRES ORDINAIRE"),text.lower()):
                print text
                extract = extract + text + "\n" 
                continue
    }

  5. #25
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Non désolé, j'étais sur une question simple et pas tout un lot qui va avec.
    Plusieurs remarques :
    - la question portait sur de l'extraction de contenu pdf : j'ai répondu à la question avec [:3]. Apparemment, tu n'utilises pas ce que j'ai mis
    - je vois dans le programme de la gestion de fichiers excel et je n'ai pas envi de m'y pencher
    - pour ce qui est de lister les fichiers, c'est assez simple, il suffit de regarder les fils voisins par exemple
    - je vois un print tout seul qui porte à croire que tu travailles en python2, ce n'est pas mon cas.

  6. #26
    Membre actif
    Homme Profil pro
    Data science
    Inscrit en
    Mai 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Data science
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 16
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Non désolé, j'étais sur une question simple et pas tout un lot qui va avec.
    Plusieurs remarques :
    - la question portait sur de l'extraction de contenu pdf : j'ai répondu à la question avec [:3]. Apparemment, tu n'utilises pas ce que j'ai mis
    - je vois dans le programme de la gestion de fichiers excel et je n'ai pas envi de m'y pencher
    - pour ce qui est de lister les fichiers, c'est assez simple, il suffit de regarder les fils voisins par exemple
    - je vois un print tout seul qui porte à croire que tu travailles en python2, ce n'est pas mon cas.
    J'ai pu modifier ma fonction de lecture pour boucler sur les 3 pages. Par contre au niveau de l'extraction ca ne me renvoi rien dans mon fichier excel.
    Je sais pas si vous pouvez m'orienter sur ce qui cloche svp . Voila le code pour l'extraction dans un Excel:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    treated_dir = []
    treatment = []
    problems = []
     
    cpt = 0
    for [parten, dir_, file] in df_doc_interest.values[cpt:]:
        try:
            print("Treating CPT = ", cpt)
            file_path = os.path.join(path_extraction_folder,parten,dir_, file)
            treat_path_dir = os.path.join("EAI-imgs 2", parten, dir_)
            if(treat_path_dir not in treated_dir):
                treated_dir.append(treat_path_dir)
                os.makedirs( treat_path_dir, 777 )
     
            print(file_path)
            treatment.append(read_pdf_file(file_path, treat_path_dir, cpt))
        except:
            print("problem ",cpt)
            problems.append(file)
            pass;
        cpt+=1
     
    #C'est a partir d'ici qu'il ya un pb. Mon DataFrame est vide quand je le print je sais pas pourquoi ? 
     
        if(cpt % 10 == 0):
            text_list = []
            digital_list = []
            file_id_list = []
            for x in treatment:
                for xx in x[0]:
                    text_list.append(xx)
                    digital_list.append(x[1])
                    file_id_list.append(x[2])
            save_file = pd.DataFrame()
            save_file["text"] = text_list
            save_file["is_digital"] = digital_list
            save_file["file_id"] = file_id_list
            save_file.to_excel("./backup/save_backup_"+str(cpt)+".xlsx",index=False)

  7. #27
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Avant de l'envoyer dans un fichier excel, il faudrait peut-être voir s'il y a qqchose qui sort de la lecture, non ?

Discussions similaires

  1. [FPDF] Extraire le texte d'un pdf
    Par SandraG dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 08/10/2009, 15h48
  2. [PDF] extraire le contenu d'un pdf en text simple
    Par SpaceFrog dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/10/2009, 09h32
  3. [VB6] Afficher le contenu d'un Pdf dans une form
    Par joquetino dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 04/08/2006, 20h59
  4. Extraire le contenu des balises XML
    Par calimero2611 dans le forum Modules
    Réponses: 7
    Dernier message: 12/06/2006, 16h09

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