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()