Je travaille sur un générateur de texte aléatoire - sans utiliser de chaînes de Markov - et cela fonctionne actuellement sans trop de problèmes. Tout d'abord, voici mon flux de code:Comment rendre ce générateur de texte aléatoire plus efficace en Python?
Entrez une phrase comme entrée -Ce est appelée chaîne de déclenchement, est affecté à un Variable-
Obtenez mot le plus long dans la chaîne de déclenchement
Recherche toute la base de données Project Gutenberg pour les phrases qui contiennent ce mot - sans majuscules minuscules -
Renvoyer la phrase la plus longue contenant le mot dont j'ai parlé à l'étape 3
ajouter la phrase à l'étape 1 et Etape 4 ensemble
Affecter la phrase à l'étape 4 comme la nouvelle phrase « gâchette » et répéter le processus. Notez que je dois obtenir le mot le plus long dans la deuxième phrase et continuer comme ça et ainsi ON-
Et voici mon code:
import nltk
from nltk.corpus import gutenberg
from random import choice
triggerSentence = raw_input("Please enter the trigger sentence: ")#get input str
longestLength = 0
longestString = ""
listOfSents = gutenberg.sents() #all sentences of gutenberg are assigned -list of list format-
listOfWords = gutenberg.words()# all words in gutenberg books -list format-
while triggerSentence:
#so this is run every time through the loop
split_str = triggerSentence.split()#split the sentence into words
#code to find the longest word in the trigger sentence input
for piece in split_str:
if len(piece) > longestLength:
longestString = piece
longestLength = len(piece)
#code to get the sentences containing the longest word, then selecting
#random one of these sentences that are longer than 40 characters
sets = []
for sentence in listOfSents:
if sentence.count(longestString):
sents= " ".join(sentence)
if len(sents) > 40:
sets.append(" ".join(sentence))
triggerSentence = choice(sets)
print triggerSentence
Ma préoccupation est, la boucle atteint la plupart du temps à un point où la même phrase est imprimée encore et encore. Puisque c'est la phrase la plus longue qui a le mot le plus long. Pour contrer la répétition de la même phrase, j'ai pensé aux éléments suivants:
* Si le mot le plus long de la phrase actuelle est le même que dans la dernière phrase, supprimez simplement ce mot le plus long de la phrase en cours et cherchez le prochain mot le plus long.
J'ai essayé quelques implémentations pour cela mais je n'ai pas réussi à appliquer la solution ci-dessus car elle implique des listes et une liste de listes - en fonction des mots et des phrases du module gutenberg-. Des suggestions sur la façon de trouver le deuxième mot le plus long? Il semble que je ne puisse pas faire cela en analysant une simple entrée de chaîne puisque les fonctions .sents() et .words() du module Gutenberg de NLTK donnent respectivement la liste des listes et des listes. Merci d'avance.
La balise '[process]' n'ajoute aucune information utile. La balise '[random]' serait plus appropriée. – Zaz
@Josh Aye, monsieur! – jensgram
Ces variablesNames seraient beaucoup plus pythoniques que [noms_variable] (http://www.python.org/dev/peps/pep-0008/) – Daenyth