Partage
  • Partager sur Facebook
  • Partager sur Twitter

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

    6 novembre 2022 à 18:58:41

    Bonjour à tous, architecte en formation, débutant dans le langage 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 langage python)

    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 = 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(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)
    

    et voici l'erreur ---------------------------------------------------------------------------

    NameError                                 Traceback (most recent call last)
    Input In [76], 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
    merci d'avance à tous
    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2022 à 19:28:33

      Faut préfixer les attributs de la class main par "main.attribut", classe qui devrait plutôt être Main au passage.
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        7 novembre 2022 à 11:33:07

        ou en regardant le code github, c'est un problème d'indentation de tout à partir de la ligne 21
        • Partager sur Facebook
        • Partager sur Twitter
          8 novembre 2022 à 12:52:57

          la suite sur https://www.developpez.net/forums/d2140925/autres-langages/python/general-python/script-generation-texte-probleme/#post11891176 

          Je me suis aperçu de la présence dans le message d'erreur du mot "cell", ce qui me fait penser à l'utiliser d'un notebook type jupyter, et que la classe serait divisée sur plusieurs cellules, ce qui doit causer le problème (et du fait de l'indentation) 

          • Partager sur Facebook
          • Partager sur Twitter
            8 novembre 2022 à 19:14:12

            je précise que je n'ai aucune base en langage python

            Et on utilise les classes :lol:

            • Partager sur Facebook
            • Partager sur Twitter

            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)

              8 novembre 2022 à 19:15:28

              il a juste repris le code du github (qui était en plus en python 2.7)
              • Partager sur Facebook
              • Partager sur Twitter
                8 novembre 2022 à 19:36:00

                Quand on est débutant, on reprend des codes de débutant, c'est assez logique, car on comprend ou on peut tester ce qui est écrit (par ex. sur un interpréteur python).

                Travailler avec des classes, même si c'est une reprise de code, en considérant qu'on a aucune base dans le langage, ça va bien si du premier coup ça s'exécute comme on veut, mais quand on arrive à une exécution foireuse, alors ça devient tout de suite très compliqué. Alors deux choix, soit on arrive à niveau en apprenant la syntaxe, soit on fait autrement, comme par ex. créer son propre générateur avec les bases qu'on connaît.

                L'aider lui permettra de toute façon pas de comprendre, car on est très loin du niveau attendu sur la partie syntaxe.

                Concernant le code, je pense que l'auteur est lui même très loin du minimum syndical... ce code est hors convention et hors "zen of python", ça mérite limite le fouet :lol:

                • Partager sur Facebook
                • Partager sur Twitter

                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)

                  9 novembre 2022 à 1:04:48

                  Merci à umfred et à tous 

                  Bien sur mes lacunes sur les bases n'aident en rien. Clairement, mais en galérant on peut aussi apprendre et comprendre les choses par soit même. Du coup le code s'exécute :p 

                  import os
                  import sys
                  import random
                   
                  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 = 'null'
                  determinant = '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<= 30: #nombre de phrases a generer
                   
                   
                          if choix == 'null':
                                  choix = random.choice(classification)
                   
                          while choix !=  determinant.split(',')[1]:
                                  determinant=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)+' '+determinant.split(',')[0]+' '+adjectif.split(',')[0]+' '+nom_commun.split(',')[0]
                          liste_resultat.append(phrase)
                          print (phrase)
                          i=i+1
                          choix = 'null'
                          determinant = 'null,null'
                          nom_commun = 'null,null'
                          positif = 'null,null'
                          negatif = 'null,null'
                   
                  resultat = open('resultat.txt', "w")
                  resultat.write('\n'.join(liste_resultat))
                  resultat.close()
                  print('\nResultat : '+ resultat.name)

                  Et le charabia qui en sort : 

                  nettoie sa bien équipée Véranda
                  travaille ce sombre Cabinet
                  joue une bien équipée Salle de bain
                  lis un grand Comble
                  plie le linge la bien équipée Véranda
                  plie le linge ta bien équipée Séjour
                  me change sa bien équipée Mezzanine
                  me divertis la bien équipée Ouvroir
                  travaille le moderne Grenier
                  Etudier la bien équipée Buanderie
                  fais mon lit mon spacieux Solarium
                  fais mon lit ce sombre Grenier
                  Epousseter sa bien équipée Garde-robe
                  repasse une bien équipée Salle de réception
                  repasse leur sombre Atelier
                  recois des invités  ce bruyant Garde-manger
                  nettoie du mal équipé Atelier
                  rêve la bien équipée Office
                  lave leur sale Grenier
                  dors une bien équipée Terrasse
                  travaille mon meublé Garage
                  me divertis la bien équipée Cave
                  nettoie la bien équipée Chapelle
                  fais mon lit de la bien équipée Loggia
                  me change cet négligé Bureau
                  lave cet tranquille Vestibule
                  répare ta bien équipée Mezzanine
                  fais mon lit un sombre Toilette
                  nettoie ta bien équipée Salle à manger
                  recois des invités  du propre Vestibule
                  
                  Resultat : resultat.txt



                  • Partager sur Facebook
                  • Partager sur Twitter

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

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown