python2.7中文本预测算法的程序错误

2024-04-24 19:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在this question中遇到了以下代码:

from collections import defaultdict
import random

class 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 ('', '')

当我在我的系统上运行代码时,这个例子不起作用。你知道吗

当我运行鲍勃。问()行我得到一个错误,说ask()需要两个参数,而它只有一个。当我运行鲍勃。问(“玛丽有”)我得到的部分作为输出。你知道吗

另外,我完全按照答案中的说明运行了代码。你知道吗

有人能帮忙吗?谢谢!你知道吗


Tags: 代码selftxtreturnifdeflinkseed
1条回答
网友
1楼 · 发布于 2024-04-24 19:25:03

我认为你是对的。它不起作用,因为ask需要一个参数(seed),如

def ask(self, seed): 

这条线

if not seed:
    seed = self.getInitial()

建议您可以通过为seed设置默认参数来解决此问题。试试这个:

def ask(self, seed=False):

这对我很有用。你知道吗

相关问题 更多 >