2013-06-11 4 views
0

Я новичок в python, и мне нужна ваша помощь. У меня есть код, который использует цепочки марков для генерации предложений, но для работы кода я должен определить 2 стартовых слова, но я хочу, чтобы первое слово было выбрано случайно, можете ли вы мне помочь?Творческие предложения с цепочкой марков в python

это код:

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) 

ответ

0

Это будет выбирать случайным образом из слов в словаре:

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

спасибо, но я положил, что и дает мне эту ошибку: «TraceBack (последний последний звонок): Файл «C: \ Users \ Gerson \ Desktop \ test2.py», строка 56, в previous [0] = random.choice (wordMap.keys()) TypeError: 'tuple 'объект не поддерживает элемент assi gnment " – user2438683

+0

Я уже импортирую случайную функцию в верхней части кода, я думаю, что это не проблема. – user2438683

+0

Извините, вы не можете перезаписать отдельный элемент в кортеже. Используя промежуточные переменные: 'first = random.choice (wordMap.keys())' затем присваиваем любое второе слово 'second' и устанавливаем' предыдущий = (первый, второй) '. – richsilv