Python ';马尔科夫发生器';对象没有属性';一起';

Python ';马尔科夫发生器';对象没有属性';一起';,python,Python,我在课堂上遇到了一个问题,我不知道原因,有人能帮我吗 问题出在def together()中,下面是我的代码 class MarkovGenerator(object): def __init__(self, n, max): self.n = n # order (length) of ngrams self.max = max # maximum number of elements to generate self.ngrams = dict() # ngra

我在课堂上遇到了一个问题,我不知道原因,有人能帮我吗

问题出在def together()中,下面是我的代码

class MarkovGenerator(object):

  def __init__(self, n, max):
    self.n = n # order (length) of ngrams
    self.max = max # maximum number of elements to generate
    self.ngrams = dict() # ngrams as keys; next elements as values
    beginning = tuple(["That", "is"]) # beginning ngram of every line
    beginning2 = tuple(["on", "the"])
    self.beginnings = list()
    self.beginnings.append(beginning)
    self.beginnings.append(beginning2)
    self.sentences = list()


  def tokenize(self, text):
    return text.split(" ")

  def feed(self, text):

    tokens = self.tokenize(text)

    # discard this line if it's too short
    if len(tokens) < self.n:
      return

    # store the first ngram of this line
    #beginning = tuple(tokens[:self.n])
    #self.beginnings.append(beginning)

    for i in range(len(tokens) - self.n):

      gram = tuple(tokens[i:i+self.n])
      next = tokens[i+self.n] # get the element after the gram

      # if we've already seen this ngram, append; otherwise, set the
      # value for this key as a new list
      if gram in self.ngrams:
        self.ngrams[gram].append(next)
      else:
        self.ngrams[gram] = [next]

  # called from generate() to join together generated elements
  def concatenate(self, source):
    return " ".join(source)

  # generate a text from the information in self.ngrams
  def generate(self,i):

    from random import choice

    # get a random line beginning; convert to a list. 
      #current = choice(self.beginnings)
    current = self.beginnings[i]
    output = list(current)

    for i in range(self.max):
      if current in self.ngrams:
        possible_next = self.ngrams[current]
        next = choice(possible_next)
        output.append(next)
        # get the last N entries of the output; we'll use this to look up
        # an ngram in the next iteration of the loop
        current = tuple(output[-self.n:])
      else:
        break

    output_str = self.concatenate(output)
    return output_str


    def together(self):
      return "lalala"


if __name__ == '__main__':

  import sys
  import random


  generator = MarkovGenerator(n=2, max=16)
  for line in open("us"):
    line = line.strip()
    generator.feed(line)

  for i in range(2):
    print generator.generate(i) 
    print generator.together()
类MarkovGenerator(对象):
定义初始值(自,n,最大值):
self.n=n#ngrams的顺序(长度)
self.max=max#要生成的最大元素数
self.ngrams=dict()#ngrams作为键;下一个元素作为值
开始=元组([“That”,“is”])#开始每行的ngram
Begining2=元组([“on”,“the”])
self.beginings=list()
self.beginings.append(开始)
self.beginings.append(begining2)
self.句子=列表()
def标记化(自我、文本):
返回文本。拆分(“”)
def提要(自身,文本):
tokens=self.tokenize(文本)
#如果这条线太短,就丢弃它
如果len(代币)
但我的错误是:

Traceback (most recent call last):
  File "markovoo2.py", line 112, in <module>
    print generator.together()
AttributeError: 'MarkovGenerator' object has no attribute 'together'
回溯(最近一次呼叫最后一次):
文件“markovoo2.py”,第112行,在
打印生成器.together()
AttributeError:“MarkovGenerator”对象没有“together”属性

有人知道原因吗?

您将
def一起缩进()
函数定义太多,它是
def generate()
函数体的一部分


取消缩进以匹配类主体中的其他函数。

您将
def()函数定义缩进得太深,它是
def generate()
函数主体的一部分


取消缩进以匹配类主体中的其他函数。

看起来您的
def缩进太深了。它位于
generate
方法中。将其移出一个缩进级别。

看起来您的
def缩进太深了。它位于
generate
方法中。将其移出一个缩进级别。

赠品位于定义参数列表中的
self
。非常感谢您回答我的问题!赠品是定义参数列表中的
self
。非常感谢您回答我的问题!