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 :

Script de génération de texte (Problème)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2022
    Messages : 12
    Points : 1
    Points
    1
    Par défaut Script de génération de texte (Problème)
    Bonjour à tous, architecte en formation, débutant dans le language Python, j'ai un souci sur un script que j'essais de modifier à ma sauce.
    Le lien du script https://github.com/Guy0m/text-genera.../generateur.py

    Pour vous expliquer, je cherche à générer des phrase aléatoire avec des bases de données (listes de mots) : Verbe, nom communs etc

    Voici ce que j'ai essayé de manipuler sans trouver la solutions (je précise que je n'ai aucune base en language python)

    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
    import os
    import sys
    import random
     
    class main:
     
            liste_determinants = list(open(r'determinants.txt', "rb").read().splitlines())
            liste_negatif = list(open(r'qualites.txt', "rb").read().splitlines())
            liste_positif = list(open(r'qualites.txt', "rb").read().splitlines())
            liste_sujet_verbe = list(open(r'verbes.txt', "rb").read().splitlines())
            liste_noms_communs = list(open(r'pieces.txt', "rb").read().splitlines())
            liste_resultat=[]
            choix = 'null'
            determinants = 'null,null'
            nom_commun = 'null,null'
            positif = 'null,null'
            negatif = 'null,null'
            classification = ['masculin', 'feminin'] #'neutre', 'pluriel', 'voyelle'
            tendance = 50; #tendance negative a 100, neutre a 50, positive a 0
     
     i=1
            while i<= 5: #nombre de phrases a generer
     
     
                    if choix == 'null':
                            choix = random.choice(classification)
     
                    while choix !=  determinants.split(',')[1]:
                            determinants=random.choice(liste_determinants)
     
                    if tendance < random.randint(0,100):
                            while choix != positif.split(',')[1]:
                                    positif=random.choice(liste_positif)
                                    adjectif=positif
     
                    else:
                            while choix !=  negatif.split(',')[1]:
                                    negatif=random.choice(liste_negatif)
                                    adjectif=negatif
     
                    while choix !=  nom_commun.split(',')[1]:
                            nom_commun=random.choice(liste_noms_communs)
     
                    phrase=random.choice(liste_sujet_verbe)+' '+determinants.split(',')[0]+' '+adjectif.split(',')[0]+' '+nom_commun.split(',')[0]
                    liste_resultat.append(phrase)
                    print (phrase)
                    i=i+1
                    choix = 'null'
                    determinants = 'null,null'
                    nom_commun = 'null,null'
                    positif = 'null,null'
                    negatif = 'null,null'
     
            resultat = open('resultat.txt', "w")
            resultat.write('\n'.join(liste_resultat))
            print('\nResultat : '+ resultat.name)

    Pour le moment voici l'erreur :

    ---------------------------------------------------------------------------
    NameError Traceback (most recent call last)
    Input In [28], in <cell line: 2>()
    6 choix = random.choice(classification)
    8 while choix != determinants.split(',')[1]:
    ----> 9 determinants=random.choice(liste_determinants)
    11 if tendance < random.randint(0,100):
    12 while choix != positif.split(',')[1]:

    NameError: name 'liste_determinants' is not defined

    Mais je pense qu'elle va s'appliquer à toute les fcts de liste.
    Mes fichiers textes sont bien entendu dans le bon dossier.
    Je suis un peu perdu et c'est pour un projet d'architecture que j'essais de mettre en place (master2). merci d'avance à tous

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Caesarjulius Voir le message
    je précise que je n'ai aucune base en language python
    Quelque part, je pense que c'est un gros handicap.
    Le souci principal de ton code c'est cet objet main qui ne possède aucune méthode, aucun constructeur, et que Python ne sait donc pas analyser.
    Plus ce "i=0" suivi en dessous par une ligne décalée alors qu'il n'y a aucune raison de marquer ici un début de bloc.

    J'ai parfois l'impression que les gens qui ne sont pas du métier considèrent l'informatique en général et les langages (sans "u" en français) de programmation en particulier comme une espèce de "sous-domaine abatardi" tellement évident, tellement peanut, qu'il ne mérite même pas qu'on s'y attarde, qu'il suffit de lire un exemple de 3 lignes et que le reste viendra tout seul, presque par capilarité.
    Donc Python c'est un peu comme tout le reste, ça doit aussi s'apprendre et se travailler.

    Pour le reste, tu ouvres tes fichiers textes en "rb" (b=binaire et un fichier texte ce n'est pas un fichier binaire), tu ne les fermes pas, tu utilises une string "null" comme marqueur particulier (il existe None pour ça) et tu utilises des mots (ex masculin, féminin) comme indicateur d'état (c'est plus rapide de passer par des valeurs spécifiques et surtout ça ne dépend alors plus de la langue utilisée).

    Citation Envoyé par Caesarjulius Voir le message
    Pour le moment voici l'erreur :
    Même pas, comme je le pensais, l'erreur est sur la ligne 22 while i<= 5: #nombre de phrases a generer qui contient une indentation inattendue (plus la ligne i=1 elle aussi décalée via un espace à son début).
    Donc si tu ne dois lire qu'une seule page d'un tutoriel Python, je te recommande celle-ci.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2022
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Le souci principal de ton code c'est cet objet main qui ne possède aucune méthode, aucun constructeur, et que Python ne sait donc pas analyser.
    Plus ce "i=0" suivi en dessous par une ligne décalée alors qu'il n'y a aucune raison de marquer ici un début de bloc.
    Finalement il n'y a pas de solutions dans cette configuration.

    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
     
    class main:
     
            liste_determinants = list(open(r'determinants.txt', "rb").read().splitlines())
            liste_negatif = list(open(r'qualites.txt', "rb").read().splitlines())
            liste_positif = list(open(r'qualites.txt', "rb").read().splitlines())
            liste_sujet_verbe = list(open(r'verbes.txt', "rb").read().splitlines())
            liste_noms_communs = list(open(r'pieces.txt', "rb").read().splitlines())
            liste_resultat=[]
            choix = None
            determinants = None
            nom_commun = None
            positif = None
            negatif = None
            classification = ['masculin', 'feminin'] #'neutre', 'pluriel', 'voyelle'
            tendance = 50; #tendance negative a 100, neutre a 50, positive a 0
    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
     
    i=1
    while i<= 5: #nombre de phrases a generer
     
     
                    if choix == None:
                            choix = random.choice(classification)
     
                    while choix !=  determinants.split(',')[1]:
                            determinants=random.choice(liste_determinants)
     
                    if tendance < random.randint(0,100):
                            while choix != positif.split(',')[1]:
                                    positif=random.choice(liste_positif)
                                    adjectif=positif
     
                    else:
                            while choix !=  negatif.split(',')[1]:
                                    negatif=random.choice(liste_negatif)
                                    adjectif=negatif
     
                    while choix !=  nom_commun.split(',')[1]:
                            nom_commun=random.choice(liste_noms_communs)
     
                    phrase=random.choice(liste_sujet_verbe)+' '+determinants.split(',')[0]+' '+adjectif.split(',')[0]+' '+nom_commun.split(',')[0]
                    liste_resultat.append(phrase)
                    print (phrase)
                    i=i+1
                    choix = None
                    determinants = None
                    nom_commun = None
                    positif = None
                    negatif = None
     
    resultat = open('resultat.txt', "w")
    resultat.write('\n'.join(liste_resultat))
    print('\nResultat : '+ resultat.name)

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Caesarjulius Voir le message
    Finalement il n'y a pas de solutions dans cette configuration.
    Dès que tu as class ... tu manifestes ton intention de créer un objet. Tu dois ensuite créer son constructeur, des attributs et méthodes (tout ce qui caractérise la vision "informatique" d'un objet de la vie réelle). Si par exemple je veux créer un objet "voiture", il est probable que j'y mettrais un attribut "puissance", un autre "vMax", un autre "immatriculation" etc.
    Une fois l'objet créé, tu peux l'utiliser.

    Ici tu ne fais rien de tout cela.

    Si tu commençais simplement...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("determinants.txt", "r") as fp: liste_determinants=fp.readlines()
    print(liste_determinants)
    ... et regardais ce que ça donne...

    Pour info, la partie qui explique comment créer et utiliser les objets est le chapitre 14 de mon tuto. Cela signifie qu'il y a 13 chapitres à assimiler avant de vouloir s'y attaquer.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Caesarjulius Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with open "determinants.txt" as fp: liste_determinants=fp.readlines()
    print(liste_determinants)
     
     Input In [2]
        with open "determinants.txt" as fp: liste_determinants=fp.readlines()
                  ^
    SyntaxError: invalid syntax
    Des parenthèses à open(), c'est une fonction

    Citation Envoyé par Caesarjulius Voir le message
    Mais tu a peut-être raison je m'attaque à quelque chose qu'il faut maitriser avant tout.
    Surtout que ton exemple, "la chambre" est une string unique mais ensuite tu y insères la qualité quand tu veux sortir "la grande chambre"...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python3
    # coding: utf-8
     
    import random
     
    piece=("la chambre", "le salon", "la cuisine", "la pièce centrale")
    qualite=("grande", "petite", "moyenne")
    verbe=("marche", "rampe", "court")
     
    p=random.choice(piece).split()
    q=random.choice(qualite)
    v=random.choice(verbe)
    print("Machine %s dans %s %s %s" % (v, p[0], q, " ".join(p[1:])))

    Ne reste qu'à charger les valeurs à partir du fichier puis boucler pour sortir n phrases.

    Programmer c'est ça: commencer par faire un truc minimaliste qui fonctionne et seulement ensuite l'enrichir pour le faire correspondre au programme attendu.

    Restera les détails (ex "le grande salon")...

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2022
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message

    Des parenthèses à open(), c'est une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("determinants.txt") as fp: liste_determinants=fp.readlines()
    print(liste_determinants)
    ['le,masculin\n', 'la,feminin\n', 'les,pluriel\n', "l',voyelle\n", 'un,masculin\n', 'une,feminin\n', 'des,pluriel\n', "d',voyelle\n", 'du,masculin\n', 'de la,feminin\n', "de l',voyelle\n", 'ce,masculin\n', 'cet,masculin\n', 'cette,feminin\n', 'ces,pluriel\n', 'mon,masculin\n', 'ton,masculin\n', 'son,masculin\n', 'ma,feminin\n', 'ta,feminin\n', 'sa,feminin\n', 'mes,pluriel\n', 'tes,pluriel\n', 'ses,pluriel\n', 'notre,neutre\n', 'votre,neutre\n', 'leur,masculin\n', 'nos,pluriel\n', 'vos,pluriel\n', 'leurs,pluriel']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import random
     
    piece=("la chambre", "le salon", "la cuisine", "la pièce centrale")
    qualite=("grande", "petite", "moyenne")
    verbe=("marche", "rampe", "court")
     
    p=random.choice(piece).split()
    q=random.choice(qualite)
    v=random.choice(verbe)
    print("Machine %s dans %s %s %s" % (v, p[0], q, " ".join(p[1:])))
    Merci beaucoup oui il faudrait en effet que je parte de quelque chose de basique à améliorer. En effet c'est pas très claire, mais le principe est la. Ensuite essayé qu'il aille piocher dans mes listes de mots en fichier texte, je vais essayer d'y rajouter les déterminants, comme ci dessus et essayer de lui faire associer, le mot chambre par exemple à des déterminants masculin la ma etc.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2022
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Des parenthèses à open(), c'est une fonction[/QUOTE]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("determinants.txt") as fp: liste_determinants=fp.readlines()
    print(liste_determinants)
    ['le,masculin\n', 'la,feminin\n', 'les,pluriel\n', "l',voyelle\n", 'un,masculin\n', 'une,feminin\n', 'des,pluriel\n', "d',voyelle\n", 'du,masculin\n', 'de la,feminin\n', "de l',voyelle\n", 'ce,masculin\n', 'cet,masculin\n', 'cette,feminin\n', 'ces,pluriel\n', 'mon,masculin\n', 'ton,masculin\n', 'son,masculin\n', 'ma,feminin\n', 'ta,feminin\n', 'sa,feminin\n', 'mes,pluriel\n', 'tes,pluriel\n', 'ses,pluriel\n', 'notre,neutre\n', 'votre,neutre\n', 'leur,masculin\n', 'nos,pluriel\n', 'vos,pluriel\n', 'leurs,pluriel']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import random
     
    piece=("la chambre", "le salon", "la cuisine", "la pièce centrale")
    qualite=("grande", "petite", "moyenne")
    verbe=("marche", "rampe", "court")
     
    p=random.choice(piece).split()
    q=random.choice(qualite)
    v=random.choice(verbe)
    print("Machine %s dans %s %s %s" % (v, p[0], q, " ".join(p[1:])))
    Merci beaucoup oui il faudrait en effet que je parte de quelque chose de basique à améliorer. En effet c'est pas très claire, mais le principe est la. Ensuite essayé qu'il aille piocher dans mes listes de mots en fichier texte, je vais essayer d'y rajouter les déterminants, comme ci dessus et essayer de lui faire associer, le mot chambre par exemple à des déterminants masculin la ma etc.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2022
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Du coup plutôt

    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
     
    import os
    import sys
    import random
     
    class main:
     
            liste_determinants = list(open(r'determinants.txt', "r").read().splitlines())
            liste_negatif = list(open(r'qualites.txt', "r").read().splitlines())
            liste_positif = list(open(r'qualites.txt', "r").read().splitlines())
            liste_sujet_verbe = list(open(r'verbes.txt', "r").read().splitlines())
            liste_noms_communs = list(open(r'pieces.txt', "r").read().splitlines())
            liste_resultat=[]
            choix = None
            determinants = None
            nom_commun = None
            positif = None
            negatif = None
            classification = ['masculin', 'feminin'] #'neutre', 'pluriel', 'voyelle'
            tendance = 50; #tendance negative a 100, neutre a 50, positive a 0
    i=1
    while i<= 5: #nombre de phrases a generer
     
     
                    if choix == None:
                            choix = random.choice(classification)
     
                    while choix !=  determinants.split(',')[1]:
                            determinants=random.choice(list(open(r'determinants.txt', "r").read().splitlines()))
     
                    if tendance < random.randint(0,100):
                            while choix != positif.split(',')[1]:
                                    positif=random.choice(list(open(r'qualites.txt', "r").read().splitlines()))
                                    adjectif=positif
     
                    else:
                            while choix !=  negatif.split(',')[1]:
                                    negatif=random.choice(list(open(r'qualites.txt', "r").read().splitlines()))
                                    adjectif=negatif
     
                    while choix !=  nom_commun.split(',')[1]:
                            nom_commun=random.choice(list(open(r'pieces.txt', "r").read().splitlines())
     
                    phrase=random.choice(liste_sujet_verbe)+' '+determinants.split(',')[0]+' '+adjectif.split(',')[0]+' '+nom_commun.split(',')[0]
                    liste_resultat.append(phrase)
                    print (phrase)
                    i=i+1
                    choix = None
                    determinants = None
                    nom_commun = None
                    positif = None
                    negatif = None
     
    resultat = open('resultat.txt', "w")
    resultat.write('\n'.join(liste_resultat))
    print('\nResultat : '+ resultat.name)
    Deja plus la même erreur :

    Input In [3]
    phrase=random.choice(liste_sujet_verbe)+' '+determinants.split(',')[0]+' '+adjectif.split(',')[0]+' '+nom_commun.split(',')[0]
    ^
    SyntaxError: invalid syntax

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Caesarjulius Voir le message
    C'est aussi en manipulant que l'on apprend.
    Oui, ce qu'on nomme généralement "exercices". Mais les exercices sont alors de "petits trucs". Par exemple "ouvrir un fichier et lire son contenu". De là, on peut rajouter ensuite "prendre une phrase au hasard dans ce qui a été lu". Puis "découper chaque mot de la phrase". Et etc etc pour finalement arriver à générer un texte complet.
    Ce forum contient tout une gamme d'exercices divers avec solutions.

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/07/2012, 15h40
  2. [GD] Problème police opentype sur génération de texte en image
    Par Sseubb dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/03/2007, 17h03
  3. Problème Génération fichier texte
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 18/05/2006, 11h21
  4. [conseil] script de génération de mots de passe
    Par spilliaert dans le forum Langage
    Réponses: 11
    Dernier message: 07/02/2006, 20h10
  5. [Mail] Script perso de Newsletter : petit problème
    Par Invité dans le forum Langage
    Réponses: 10
    Dernier message: 12/11/2005, 13h31

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