0
저는 파이썬으로 멍청한 사람입니다. 문장을 생성하기 위해 마코프 체인을 사용하는 코드가 있지만 코드 작업에서는 시작 단어 2 개를 정의해야하지만 처음 단어를 무작위로 선택했으면 좋겠습니까?파이썬에서 마크로프 체인이있는 문장을 작성하십시오.
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)
당신을 감사합니다,하지만 난 그것을 놓고 나에게이 오류를 줄 : "를 역 추적을 (최근 호출 마지막) : 파일 "C : \ Users \ Gerson \ Desktop \ test2.py", 줄 56, 이전 [0] = random.choice (wordMap.keys()) TypeError : '튜플 '객체가 항목 assi를 지원하지 않습니다. gnment " –
user2438683
나는 이미 코드 상단에있는 랜덤 함수를 가져온다. 문제가 아닌 것 같다. – user2438683
죄송 합니다만 튜플의 개별 요소를 덮어 쓸 수는 없습니다. 중간 변수를 사용하면 : first = random.choice (wordMap.keys())'두 번째 단어가'second '이고'previous = (first, second)'가 설정됩니다. – richsilv