Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误?程序即将运行_Python_Hidden Markov Models - Fatal编程技术网

Python 属性错误?程序即将运行

Python 属性错误?程序即将运行,python,hidden-markov-models,Python,Hidden Markov Models,你好:只是一个简单的问题。。我希望如此。 我正试图用这个程序从语料库中生成随机文本。。在这种情况下,一本书的一部分 我有一个文本文件,这是我的语料库:(这是介绍,不会在这里发布全部内容) 接下来是我尝试使用的类: import random class Markov(object): def __init__(self, open_file): self.cache = {} self.open_file = open_file sel

你好:只是一个简单的问题。。我希望如此。 我正试图用这个程序从语料库中生成随机文本。。在这种情况下,一本书的一部分

我有一个文本文件,这是我的语料库:(这是介绍,不会在这里发布全部内容)

接下来是我尝试使用的类:

import random

class Markov(object):

    def __init__(self, open_file):
        self.cache = {}
        self.open_file = open_file
        self.words = self.file_to_words()
        self.word_size = len(self.words)
        self.database()


def file_to_words(self):
    self.open_file.seek(0)
    data = self.open_file.read()
    words = data.split()
    return words


def triples(self):
    """ Generates triples from the given data string. So if our string were
            "What a lovely day", we'd generate (What, a, lovely) and then
            (a, lovely, day).
    """

    if len(self.words) < 3:
        return

    for i in range(len(self.words) - 2):
        yield (self.words[i], self.words[i+1], self.words[i+2])

def database(self):
    for w1, w2, w3 in self.triples():
        key = (w1, w2)
        if key in self.cache:
            self.cache[key].append(w3)
        else:
            self.cache[key] = [w3]

def generate_markov_text(self, size=25):
    seed = random.randint(0, self.word_size-3)
    seed_word, next_word = self.words[seed], self.words[seed+1]
    w1, w2 = seed_word, next_word
    gen_words = []
    for i in xrange(size):
        gen_words.append(w1)
        w1, w2 = w2, random.choice(self.cache[(w1, w2)])
    gen_words.append(w2)
    return ' '.join(gen_words)

这里出了什么问题?谢谢。

您需要将
文件缩进到\u words
方法,以便它是马尔可夫类的一部分。目前,它是
函数中的模块级函数。将
file_to_words
方法(包括
def
行)中的所有内容向右移动4个空格


更新:所有其他方法也是如此。Python使用空格/缩进来表示作用域。

您需要将
文件缩进到\u单词
方法,以便它是Markov类的一部分。目前,它是
函数中的模块级函数。将
file_to_words
方法(包括
def
行)中的所有内容向右移动4个空格


更新:所有其他方法也是如此。Python使用空格/缩进来表示范围。

从您发布的代码中,由于缩进,除了init之外的所有方法都不属于Markov类。

从您发布的代码中,由于缩进,除init之外的所有方法都不属于Markov类。

您归档的单词没有缩进以使其成为Markov类的一部分。这是一个裸函数。您可以将单词进行缩进,使其成为Markov类的一部分。这是一个裸体函数。最后一个问题,你能解释一下为什么我现在运行的程序不会生成单词输出吗?我基本上只是把程序带到这里,试着为了好玩而运行它,但我无法匹配他的输出??最后一个问题,你能解释一下为什么现在我运行的程序不会生成单词输出吗?我基本上只是把程序带到这里,试着为了好玩而运行它,但我无法匹配他的输出??
import random

class Markov(object):

    def __init__(self, open_file):
        self.cache = {}
        self.open_file = open_file
        self.words = self.file_to_words()
        self.word_size = len(self.words)
        self.database()


def file_to_words(self):
    self.open_file.seek(0)
    data = self.open_file.read()
    words = data.split()
    return words


def triples(self):
    """ Generates triples from the given data string. So if our string were
            "What a lovely day", we'd generate (What, a, lovely) and then
            (a, lovely, day).
    """

    if len(self.words) < 3:
        return

    for i in range(len(self.words) - 2):
        yield (self.words[i], self.words[i+1], self.words[i+2])

def database(self):
    for w1, w2, w3 in self.triples():
        key = (w1, w2)
        if key in self.cache:
            self.cache[key].append(w3)
        else:
            self.cache[key] = [w3]

def generate_markov_text(self, size=25):
    seed = random.randint(0, self.word_size-3)
    seed_word, next_word = self.words[seed], self.words[seed+1]
    w1, w2 = seed_word, next_word
    gen_words = []
    for i in xrange(size):
        gen_words.append(w1)
        w1, w2 = w2, random.choice(self.cache[(w1, w2)])
    gen_words.append(w2)
    return ' '.join(gen_words)
import Class
file_ = open('derp.txt')
markov = Class.Markov(file_)
markov.generate_markov_text()