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)
спасибо, но я положил, что и дает мне эту ошибку: «TraceBack (последний последний звонок): Файл «C: \ Users \ Gerson \ Desktop \ test2.py», строка 56, в previous [0] = random.choice (wordMap.keys()) TypeError: 'tuple 'объект не поддерживает элемент assi gnment " –
user2438683
Я уже импортирую случайную функцию в верхней части кода, я думаю, что это не проблема. – user2438683
Извините, вы не можете перезаписать отдельный элемент в кортеже. Используя промежуточные переменные: 'first = random.choice (wordMap.keys())' затем присваиваем любое второе слово 'second' и устанавливаем' предыдущий = (первый, второй) '. – richsilv