Python extraction texte

Résolu
Icemansuperced Messages postés 87 Date d'inscription mardi 21 novembre 2017 Statut Membre Dernière intervention 27 juin 2024 - Modifié le 27 juin 2024 à 16:37
Icemansuperced Messages postés 87 Date d'inscription mardi 21 novembre 2017 Statut Membre Dernière intervention 27 juin 2024 - 27 juin 2024 à 21:00

Bonjour,

J'ai un problème avec un de mes scripts en Python. J'ai plusieurs PDF qui contiennent des prénoms et noms, et je tente de renommer les PDF en fonction de ces derniers. J'ai une liste des noms et prénoms censés apparaître dans les PDF pour faciliter la recherche, mais malheureusement, cela ne fonctionne pas. J'ai utilisé pytesseract et pymupdf. Auriez-vous d'autres bibliothèques à me suggérer (j'ai essayé avec pdfminer/pdfplumber, mais cela n'a pas fonctionné) ?

voici mon code: 

import os
import pandas as pd
import fitz
from PIL import Image
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'C:\Users\cedrik.sia\AppData\Local\Programs\Tesseract-OCR\tesseract.exe'
applicants_file = r'C:\Users\cedrik.si\applicants.xlsx'
applicants_df = pd.read_excel(applicants_file)
applicants_df['FullName'] = applicants_df['FirstName'] + ' ' + applicants_df['LastName']
applicant_names = set(applicants_df['FullName'].tolist() + applicants_df['FirstName'].tolist() + applicants_df['LastName'].tolist())

def ocr_image(image):
    """ Tesseract OCR."""
    text = pytesseract.image_to_string(image, lang='eng')
    return text

def extract_text_from_first_page(pdf_path):
    """PyMuPDF et OCR."""
    try:
        doc = fitz.open(pdf_path)
        page = doc.load_page(20) 
        pix = page.get_pixmap()
        image = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
        text = ocr_image(image)
        return text
    except Exception as e:
        print(f"NA extract {pdf_path}: {e}")
        return ""

def rename_pdf_with_applicant_name(pdf_path):
    try:
        text = extract_text_from_first_page(pdf_path)

        if not text.strip():
            print(f"NA extract{pdf_path}")
            return

        print(f"extraction de {pdf_path}:\n{text[:10000]}...")

        lines = text.split('\n')
        applicant_name = None
        for line in lines:
            for name in applicant_names:
                if name in line:
                    applicant_name = name
                    break
            if applicant_name:
                break
        if applicant_name:
            new_pdf_path = os.path.join(os.path.dirname(pdf_path), f"{applicant_name}.pdf")
            os.rename(pdf_path, new_pdf_path)
            print(f"Rename : {pdf_path} -> {new_pdf_path}")
        else:
            print(f"Nom de l'appliquant introuvable {pdf_path}")
    except Exception as e:
        print(f"Erreur process {pdf_path}. Détails: {e}")
pdf_directory = r'C:\Users\cedrik.si\OneDrive \AutomateDownload_GDBOX2'
for filename in os.listdir(pdf_directory):
    if filename.lower().endswith('.pdf'):
        pdf_path = os.path.join(pdf_directory, filename)
        rename_pdf_with_applicant_name(pdf_path)


Windows / Edge 126.0.0.0

modération : utiliser l'icone code pour les sources. Attention le terme "pix " étant bloqué par le robot CCM, le placer dans un message supprime automatiquement tout le message.
 

2 réponses

jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
27 juin 2024 à 16:40

Bonjour,

Quelles sont tes erreurs exactement ?

As tu mis du débug pour voir le contenu de tes différentes variables / Fonctions ?

De plus, attention, tu sembles avoir mis un espace en trop dans le chemin de ton pdf_directory


0
Icemansuperced Messages postés 87 Date d'inscription mardi 21 novembre 2017 Statut Membre Dernière intervention 27 juin 2024
27 juin 2024 à 21:00

Merci j'ai trouvé le problème finalement! 

oui pour mon path j'avais changé l'information dans le message :) 

Bref merci de ton aide ! 

0