我从这个问题中找到了以下代码:
from collections import defaultdictimport randomclass Markov: memory = defaultdict(list) separator = ' ' def learn(self, txt): for part in self.breakText(txt): key = part[0] value = part[1] self.memory[key].append(value) def ask(self, seed): ret = [] if not seed: seed = self.getInitial() while True: link = self.step(seed) if link is None: break ret.append(link[0]) seed = link[1] return self.separator.join(ret) def breakText(self, txt): #our very own (ε,ε) prev = self.getInitial() for word in txt.split(self.separator): yield prev, word prev = (prev[1], word) #end-of-sentence, prev->ε yield (prev, '') def step(self, state): choice = random.choice(self.memory[state] or ['']) if not choice: return None nextState = (state[1], choice) return choice, nextState def getInitial(self): return ('', '')
当我在我的系统上运行代码时,示例不起作用。
当我运行bob.ask()这一行时,我得到了一个错误,说ask()需要2个参数,而它只得到了一个。另外,当我运行bob.ask(“Mary had”)部分时,我得到了’ ‘作为输出。
P.S 我完全按照答案中的指示运行了代码。
谁能帮帮我?谢谢!
回答:
我认为你是对的。它不起作用是因为ask
期望一个参数(seed
),如定义所示
def ask(self, seed):
这一行
if not seed: seed = self.getInitial()
表明你可以通过为seed
设置一个默认参数来修复这个问题。试试这个:
def ask(self, seed=False):
对我来说这是有效的。