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 :

Code pour grand oral de NSI


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2025
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2025
    Messages : 3
    Par défaut Code pour grand oral de NSI
    Bonsoir,

    Mon grand oral de NSI pour le bac se porte sur la question suivante : Comment l’informatique peut favoriser l’inclusion des minorités ?

    Dans la première partie je parle des algorithmes utilisés pour faire de la discrimination sur le marché de l'emploi en donnant un exemple fait en quelques minutes, j'ai l'impression qu'il marche, enfin il a marché dans deux cas de figures mais je voulais en être sûr donc je le poste ici.

    Est-ce que vous pensez possible de me corriger si nécessaire ? Ou du moins me donner des pistes sur comment améliorer le code.

    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
    import pytesseract
    from pytesseract import image_to_string
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
     
    Prenoms = ['SACHA', 'PIERRE', 'BASILE'] # On fait la liste des prénoms acceptés.
     
    def Prenom_francais(image): # On crée une fonction qui demande une image d'un cv
    	txt = image_to_string(image) #On utilise la fonction image_to_string de pytesseract pour avoir une chaine de caractère du contenu du cv
    	splt_txt= txt.split() # On coupe la chaine de caractère en créant une liste de str avec chacun des mots
    	for i in range(len(splt_txt)): #p Pour chaque mot de la liste
    		if splt_txt[i-1] in Prenoms: # On vérifie que le terme de la liste correspond à un des termes de la liste de prénoms acceptés
    			return True # On retourne True si c'est le cas
    	return False # Si au bout du contenu du cv il n'y a pas le prénom souhaité alors on retourne False
     
    Prenom_francais('cv.jpg') # On appelle la fonction avec le cv à traiter.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 091
    Par défaut
    Ha ouais, c'est carrément pas orienté les sujets à l'école...

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 608
    Par défaut
    pourquoi commencer par l'indice i-1 dans ta boucle, alors que i va commencer à 0 ? (même si ça fonctionne)
    pourquoi ne pas parcourir directement la liste? for mot in splt_txt:est-ce que tu es sûr que les mots retournés sont en majuscules (ou plutôt en lettres capitales)?

    En poussant un peu, un Paul indiquant habité rue Pierre Perret dans son CV, passera la filtre.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 754
    Par défaut
    Hello,

    Vous n'aurez certainement pas que 3 prénoms à vérifier, mieux vaudrait faire une recherche dans un objet Set pour être plus efficace.

    Remplacez aussi range(len(...)) par enumerate si on reste avec les indices, mais mieux serait ni un ni l'autre.

    Si c'est pour l'école, c'est bien de tout détailler avec des commentaires comme vous le faîtes...

    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
    import pytesseract
    from pytesseract import image_to_string
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
     
    Prenoms = {'SACHA', 'PIERRE', 'BASILE'}  # Utiliser un set pour des lookups plus rapides (O(1)).
     
    def Prenom_francais(image):  # Fonction qui prend un chemin d'image d'un CV.
        txt = image_to_string(image)  # Utilise image_to_string pour extraire le texte du CV.
        txt_upper = txt.upper()  # Convertir le texte en majuscules une seule fois.
        splt_txt = txt_upper.split()  # Sépare le texte en une liste de mots.
        for word in splt_txt:  # Pour chaque mot de la liste (sans enumerate, car l'indice n'est pas utilisé).
            if word in Prenoms:  # Vérifie si le mot correspond à un prénom accepté.
                return True  # Retourne True si c'est le cas.
        return False  # Si aucun prénom accepté n'est trouvé, retourne False.
     
    Prenom_francais('cv.jpg')  # Appel de la fonction avec le CV à traiter.
    Une solution pour améliorer,

    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
    import pytesseract
    from pytesseract import image_to_string
    from PIL import Image  # Importer PIL pour le prétraitement de l'image.
     
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
     
    Prenoms = {'SACHA', 'PIERRE', 'BASILE'}  # Utiliser un set pour des lookups plus rapides (O(1)).
     
    def Prenom_francais(image_path):  # Fonction qui prend un chemin d'image d'un CV.
        # Ouvrir l'image avec PIL.
        img = Image.open(image_path)
     
        # Pré-traitement pour optimiser l'OCR :
        # Convertir en niveaux de gris.
        img = img.convert('L')
     
        # Agrandir l'image pour améliorer la reconnaissance (facteur 2).
        img = img.resize((img.width * 2, img.height * 2))
     
        # Extraire le texte avec pytesseract, en spécifiant la langue française et un mode de segmentation adapté (psm 6 pour bloc de texte uniforme).
        txt = image_to_string(img, lang='fra', config='--psm 6')
     
        txt_upper = txt.upper()  # Convertir le texte en majuscules une seule fois.
        splt_txt = txt_upper.split()  # Sépare le texte en une liste de mots.
     
        for word in splt_txt:  # Pour chaque mot de la liste.
            if word in Prenoms:  # Vérifie si le mot correspond à un prénom accepté.
                return True  # Retourne True si c'est le cas.
        return False  # Si aucun prénom accepté n'est trouvé, retourne False.
     
    Prenom_francais('cv.jpg')  # Appel de la fonction avec le CV à traiter.
    Autre amélioration, respectez la PEP8 (pas de franglais, fonction sans majuscule, ...)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2025
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2025
    Messages : 3
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Hello,

    Vous n'aurez certainement pas que 3 prénoms à vérifier, mieux vaudrait faire une recherche dans un objet Set pour être plus efficace.

    Remplacez aussi range(len(...)) par enumerate si on reste avec les indices, mais mieux serait ni un ni l'autre.

    Si c'est pour l'école, c'est bien de tout détailler avec des commentaires comme vous le faîtes...

    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
    import pytesseract
    from pytesseract import image_to_string
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
     
    Prenoms = {'SACHA', 'PIERRE', 'BASILE'}  # Utiliser un set pour des lookups plus rapides (O(1)).
     
    def Prenom_francais(image):  # Fonction qui prend un chemin d'image d'un CV.
        txt = image_to_string(image)  # Utilise image_to_string pour extraire le texte du CV.
        txt_upper = txt.upper()  # Convertir le texte en majuscules une seule fois.
        splt_txt = txt_upper.split()  # Sépare le texte en une liste de mots.
        for word in splt_txt:  # Pour chaque mot de la liste (sans enumerate, car l'indice n'est pas utilisé).
            if word in Prenoms:  # Vérifie si le mot correspond à un prénom accepté.
                return True  # Retourne True si c'est le cas.
        return False  # Si aucun prénom accepté n'est trouvé, retourne False.
     
    Prenom_francais('cv.jpg')  # Appel de la fonction avec le CV à traiter.
    Une solution pour améliorer,

    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
    import pytesseract
    from pytesseract import image_to_string
    from PIL import Image  # Importer PIL pour le prétraitement de l'image.
     
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
     
    Prenoms = {'SACHA', 'PIERRE', 'BASILE'}  # Utiliser un set pour des lookups plus rapides (O(1)).
     
    def Prenom_francais(image_path):  # Fonction qui prend un chemin d'image d'un CV.
        # Ouvrir l'image avec PIL.
        img = Image.open(image_path)
     
        # Pré-traitement pour optimiser l'OCR :
        # Convertir en niveaux de gris.
        img = img.convert('L')
     
        # Agrandir l'image pour améliorer la reconnaissance (facteur 2).
        img = img.resize((img.width * 2, img.height * 2))
     
        # Extraire le texte avec pytesseract, en spécifiant la langue française et un mode de segmentation adapté (psm 6 pour bloc de texte uniforme).
        txt = image_to_string(img, lang='fra', config='--psm 6')
     
        txt_upper = txt.upper()  # Convertir le texte en majuscules une seule fois.
        splt_txt = txt_upper.split()  # Sépare le texte en une liste de mots.
     
        for word in splt_txt:  # Pour chaque mot de la liste.
            if word in Prenoms:  # Vérifie si le mot correspond à un prénom accepté.
                return True  # Retourne True si c'est le cas.
        return False  # Si aucun prénom accepté n'est trouvé, retourne False.
     
    Prenom_francais('cv.jpg')  # Appel de la fonction avec le CV à traiter.
    Autre amélioration, respectez la PEP8 (pas de franglais, fonction sans majuscule, ...)
    Merci pour ces précisions, le fait est que je dois présenter ceci en 5minutes et écrire au tableau, ça n'a pas pour but d'être parfaitement optimisé mais d'être un minimum fonctionnel pour donner un exemple.

    Je modifie le nom de la fonction et des variables pour respecter la PEP8, en effet ça m'était sorti de la tête

    Merci encore

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 608
    Par défaut
    Je serais curieux de connaitre ta partie "thèse" de cette question, vu que l'on a l'antithèse.

    Pour ce que j'en lis, tu peux présenter ton algo/programme que tu auras préparé sur papier pendant la phase de préparation, sans avoir besoin de le recopier au tableau

    https://www.education.gouv.fr/reussi...nd-oral-100028

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2009, 13h17
  2. Réponses: 4
    Dernier message: 26/03/2006, 00h05
  3. [Lomboz] Génération de code pour EJB
    Par paikan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/07/2003, 15h28
  4. Réponses: 2
    Dernier message: 01/04/2003, 23h09
  5. code pour interbase 6.0 et 6.5 de generateur
    Par tripper.dim dans le forum InterBase
    Réponses: 4
    Dernier message: 01/07/2002, 12h29

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