0
Je suis un noob en python et j'ai besoin de votre aide. J'ai un code qui utilise des chaînes markov pour genarate phrases, mais pour le code fonctionne je dois définir 2 mots de départ, mais je veux que le premier mot a été choisi au hasard, pouvez-vous m'aider?Créer des phrases avec une chaîne markov en python
Voici le code:
import random
def getLines(filename):
return [line[0:-1] for line in open(filename).readlines()]
def getWords(lines):
words = []
for line in lines:
words.extend(line.split())
return words
def createProbabilityHash(words):
numWords = len(words)
wordCount = {}
for word in words:
if wordCount.has_key(word):
wordCount[word] += 1
else:
wordCount[word] = 1
for word in wordCount.keys():
wordCount[word] /= 1.0 * numWords
return wordCount
def getRandomWord(wordCount):
randomValue = random.random()
cumulative = 0.0
choosenWord = ""
print wordCount
for word in wordCount:
probability = wordCount[word]
if probability > cumulative:
cumulative = probability
choosenWord = word
return choosenWord
words = getWords(getLines("frases.txt"))
wordMap = {}
previous = (words[0], words[1])
for word in words[2:]:
if wordMap.has_key(previous):
wordMap[previous].append(word)
else:
wordMap[previous] = [word]
previous = (previous[1], word)
for word in wordMap.keys():
probabilityHash = createProbabilityHash(wordMap[word])
wordMap[word] = probabilityHash
palavras = ['hello', 'apple', 'something', 'yeah', 'nope', 'lalala']
previous = (".", "A") #Starting words
numWords = 10 # The number of words to print
print previous[0], previous[1],
for i in range(numWords):
word = getRandomWord(wordMap[previous])
print word,
if word.endswith(","):
print "\n"
if word.endswith("."):
break
previous = (previous[1], word)
merci, mais je mis cela et me donner cette erreur: « Traceback (dernier appel en dernier): Fichier "C: \ Utilisateurs \ Gerson \ Desktop \ test2.py", ligne 56, en précédent [0] = random.choice (motMap.keys()) TypeError: 'tuple 'objet ne supporte pas l'élément assi gnment " –
user2438683
J'importe déjà la fonction aléatoire dans le haut du code, je pense que ce n'est pas le problème. – user2438683
Désolé, vous ne pouvez pas écraser un élément individuel dans un tuple. En utilisant des variables intermédiaires: 'first = random.choice (wordMap.keys())' puis assigner tout ce que le second mot est 'second' et mettre' previous = (premier, second) '. – richsilv