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 :

thesaurus + python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    plasticien
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : plasticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut thesaurus + python
    salut,
    je m'amuse à bricoler un générateur de texte en python (mon premier .py). En lisant un article, je me suis dit que ce serait ben de jouer avec le dico de synonyme également.
    Malheureusement je n'arrive pas à lancer le script (code ci-dessous).
    j ai :
    Traceback (most recent call last): File "C:\Users\new\Desktop\thesaurus-v2.3\script.py", line 14, in <module> nb_passe = int(argv[1]) IndexError: list index out of range
    bon je me dit je vais un peu modifier le code pour voir :
    ...
    BDD = [] liste_def = [] count = 0 #nb_passe = int(argv[1]) nb_passe = 10
    ...
    et là : Traceback (most recent call last): File "C:\Users\new\Desktop\thesaurus-v2.3\script.py", line 29, in <module> if ligne[1].decode('utf-8').isdigit(): AttributeError: 'str' object has no attribute 'decode'
    ...
    Pourquoi?
    merci de l'aide.

    ---
    import re

    from sys import argv
    from random import randrange

    BDD = []
    liste_def = []
    count = 0
    nb_passe = int(argv[1])

    fin = [",", ")", ".", "!", "»", "]"]

    source = '''La poésie est un genre littéraire très ancien aux formes variées, écrites généralement en vers, mais qui admet aussi la prose, et qui privilégie
    l'expressivité de la forme. Sa définition se révèle difficile, et varie selon les époques, au point que chaque siècle peut lui trouver une fonction et une
    expression différente aussi d'un poète à l'autre. Le terme « poésie » et ses dérivés viennent du grec ancien ποίησις, et s'écrivait, jusqu'en 1878 poësie (le
    tréma marquait une disjonction entre les voyelles o et e). ποιεῖν (poiein) signifie « faire, créer » : le poète est donc un créateur, un inventeur de formes
    expressives, ce que révèlent aussi les termes du Moyen Âge, comme trouvère et troubadour. Le poète, héritier d'une longue tradition orale, privilégie la
    musicalité et le rythme, d'où, dans la plupart des textes poétiques, le recours à une forme versifiée qui confère de la densité à la langue. Le poète recherche
    aussi l'expressivité par le poids accordé aux mots comme par l'utilisation des figures de style et au premier chef des images et des figures d'analogie,
    recherchées pour leur force suggestive. La poésie s'est constamment renouvelée au cours des siècles avec des orientations différentes selon les époques, les
    civilisations, les aires culturelles et les individus. On peut par exemple distinguer le poète artiste soucieux d'abord de beauté formelle, le poète « lyrique »
    qui cultive le « chant de l'âme », le poète prophète, découvreur du monde et « voyant » ou le poète engagé, sans cependant réduire un créateur à une étiquette
    simplificatrice.'''

    liste_source = source.rstrip('\n\r').split(" ")
    long_source = len(liste_source)

    with open ("thes_fr.dat", 'r') as base:
    for ligne in base:
    ligne = ligne.rstrip('\n').split("|")
    BDD.append(ligne)

    if ligne[1].decode('utf-8').isdigit():
    liste_def.append(int(count))

    count += 1

    for x in range(nb_passe):

    mot = ''
    fin_mot = ''

    while len(mot) < 4:
    num_choix_mot_source = randrange(long_source)
    mot = liste_source[num_choix_mot_source]

    for i in fin:
    if mot[-1] == i:
    fin_mot = i #conserve la fin du mot
    print(fin_mot)
    mot = mot[:-1] # tronque la fin du mot

    for i in range(len(liste_def)):

    if mot == BDD[liste_def[i]][0]: # ne parcourt que les lignes de définition

    nb_sens = int(BDD[liste_def[i]][1]) # check le nb de sens

    if nb_sens != 1:
    choix_sens = randrange(nb_sens)+1
    liste_mot = BDD[int(liste_def[i])+choix_sens] #choisi parmi les différents sens

    else:
    liste_mot = BDD[int(liste_def[i])+1]

    synonyme = liste_mot[randrange(len(liste_mot)-1)+1] #choisi un mot dans la liste choisie

    print('''"{0}" est devenu "{1}"'''.format(mot, synonyme))

    liste_source[num_choix_mot_source] = synonyme+fin_mot #remplace le mot dans la liste en ajoutant la fin éventuelle

    final = ""
    for i in liste_source:

    final += i + " "

    print (final.decode('utf-8'))

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Salut,

    C'est un script Python.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_passe = int(argv[1])
    suppose que le script est lancé avec un entier passe en paramètre.

    et là : Traceback (most recent call last): File "C:\Users\new\Desktop\thesaurus-v2.3\script.py", line 29, in <module> if ligne[1].decode('utf-8').isdigit(): AttributeError: 'str' object has no attribute 'decode'
    ...
    Probablement parce que le script est Python2.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    plasticien
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : plasticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut
    merci pour le retour,

    en effet ça tourne en python2
    j ai modifier

    nb_passe = int(argv[1]) (qui posait tjrs pb)

    par

    nb_passe = input("combien de passage?")

    et ca fonctionne

    J'imagine que la conversion vers du python 3 est complexe (en fin pour moi)
    As tu une piste pour que je parvienne à l'effectuer ?
    merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    plasticien
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : plasticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut
    ben pas si compliqué ...
    j ai réussi en faisant ce que python me demandait ... lui donner un str

    if ligne[1].decode('utf-8').isdigit():
    est devenu
    if str(ligne[1].decode('utf-8').isdigit()):

    et ca tourne

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    plasticien
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : plasticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut
    re-
    je suis maintenant entrain de se faire se rencontrer mon generateur de texte et le thesaurus
    apres quelques modifs j'y suis presque mais y a bug

    a savoir que le script "fonctionne" maintenant sur python3

    le bug :
    Traceback (most recent call last):
    File "C:\Users\new\Desktop\generateur de texte\generateur_et_thesaurus.py", line 111, in <module>
    if mot[-1] == i:
    IndexError: string index out of range
    >>>
    merci d avance
    a+


    le code :
    #!/usr/bin/env python
    # -*- coding: utf8 -*-
    # Publié sous les termes de la CC-BY-SA

    import re

    from sys import argv
    import random

    start = "o"
    fic = open ("texte.txt", "w")
    fic.close()

    while start == "o" or start == "O" :
    print (" ")
    print ("Ceci est un générateur de descritif d'image. Indiquez l'objet principal pour chaque zone. S'il vous souhaitez ne rien indiquer, écrivez 'rien'.")
    fic = open("image.txt","r")
    tableau = tuple(fic.readlines())
    for i in range(0,len(tableau)):
    print (tableau[i].strip())

    liste =("123456789")
    reponse = ["","","","","","","","","",""]
    for i in range(0,len(liste)):
    reponse[i] = input ("Que voit on en "+ liste[i] +" ? ")
    if reponse[i] == "rien" :
    print ("Aucune description")
    else :
    print ("Vous avez écrit : " + reponse[i])



    def generateur_phrase (plan,obj) :
    if obj != "rien":

    fic = open ("comment.txt", "r")
    n_ligne_com = tuple (fic.readlines())
    ranc = random.randint(0,len(n_ligne_com))-1
    fic.close()

    fic = open (str(plan)+".txt", "r")
    n_ligne = tuple (fic.readlines())
    ran = random.randint(0,len(n_ligne))-1
    fic.close()

    fic = open ("verbes.txt", "r")
    n_ligne_verbe = tuple (fic.readlines())
    ranv = random.randint(0,len(n_ligne_verbe))-1
    fic.close()

    fic = open ("ponctuation.txt", "r")
    pon = tuple (fic.readlines())
    ranp = random.randint(0,len(pon))-1
    fic.close()
    texte = n_ligne_com[ranc].strip()+" "+n_ligne[ran].strip()+" "+n_ligne_verbe[ranv].strip()+" "+obj
    print (texte)

    # print (n_ligne_com[ranc].strip()+" "+n_ligne[ran].strip()+" "+n_ligne_verbe[ranv].strip()+" "+obj, end =pon[ranp])
    fic = open ("texte.txt", "a")
    fic.write(texte)
    fic.close()
    # print (" {} {} {}".format(n_ligne[ran].strip(),n_ligne_verbe[ranv].strip(),obj), end =pon[ranp])
    print ("\n"+"Voici la description de votre image"+"\n")
    for i in range(9):
    generateur_phrase (i+1, reponse[i])
    print (" ")
    start = input("Voulez-vous effectuer une autre description ? (o/n) : ")




    BDD = []
    liste_def = []
    count = 0
    nb_passe = input ("combien de passage?")


    fin = [",", ")", ".", "!", "»", "]"]
    fic = open ("texte.txt", "r")
    #source = turple (fic.readlines())
    source = str (fic.readlines())
    print (source)
    fic.close()

    liste_source = source.rstrip('\n\r').split(" ")
    long_source = len(liste_source)

    with open ("thes_fr.dat", 'r') as base:
    for ligne in base:
    ligne = ligne.rstrip('\n').split("|")
    BDD.append(ligne)

    #if ligne[1].decode('utf-8').isdigit():
    if ligne[1].isdigit():
    liste_def.append(int(count))

    count += 1

    for x in range(int(nb_passe)):

    mot = ''
    fin_mot = ''

    while len(mot) < 4:
    #num_choix_mot_source = randrange(long_source)
    num_choix_mot_source = random.randrange(long_source)

    mot = liste_source[num_choix_mot_source]

    for i in fin:
    if mot[-1] == i:
    fin_mot = i #conserve la fin du mot
    print(fin_mot)
    mot = mot[:-1] # tronque la fin du mot

    for i in range(len(liste_def)):

    if mot == BDD[liste_def[i]][0]: # ne parcourt que les lignes de définition

    nb_sens = int(BDD[liste_def[i]][1]) # check le nb de sens

    if nb_sens != 1:
    choix_sens = random.randrange(nb_sens)+1
    liste_mot = BDD[int(liste_def[i])+choix_sens] #choisi parmi les différents sens

    else:
    liste_mot = BDD[int(liste_def[i])+1]

    synonyme = liste_mot[random.randrange(len(liste_mot)-1)+1] #choisi un mot dans la liste choisie

    print('''"{0}" est devenu "{1}"'''.format(mot, synonyme))

    liste_source[num_choix_mot_source] = synonyme+fin_mot #remplace le mot dans la liste en ajoutant la fin éventuelle

    final = ""
    for i in liste_source:

    final += i + " "

    #print (final.decode('utf-8'))
    print (final)
    ok = input ("ok?");

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    L'erreur dit simplement que le mot est vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> mot = ''
    >>> mot[-1]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: string index out of range
    >>>
    Donc qu'il y a une erreur de logique ou des hypothèses non satisfaites et mal traitées côté données.

    Si vous voulez qu'on puisse débugger le code à votre place, il serait temps d'apprendre à utiliser la balise code (le bouton '#' qui apparaît à l'édition d'un message).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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