2013-06-11 7 views
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) 

Répondre

0

Cela choisira au hasard parmi les mots dans votre dictionnaire:

import random 
previous[0] = random.choice(wordMap.keys()) 
+0

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

+0

J'importe déjà la fonction aléatoire dans le haut du code, je pense que ce n'est pas le problème. – user2438683

+0

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

Questions connexes