python - 'MarkovGenerator' object has no attribute 'together' -
i come problem class , don't know reason, can me out?
the problem in def together(), here code.
class markovgenerator(object): def __init__(self, n, max): self.n = n # order (length) of ngrams self.max = max # maximum number of elements generate self.ngrams = dict() # ngrams keys; next elements 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 line if it's short if len(tokens) < self.n: return # store first ngram of line #beginning = tuple(tokens[:self.n]) #self.beginnings.append(beginning) in range(len(tokens) - self.n): gram = tuple(tokens[i:i+self.n]) next = tokens[i+self.n] # element after gram # if we've seen ngram, append; otherwise, set # value key new list if gram in self.ngrams: self.ngrams[gram].append(next) else: self.ngrams[gram] = [next] # called generate() join generated elements def concatenate(self, source): return " ".join(source) # generate text information in self.ngrams def generate(self,i): random import choice # random line beginning; convert list. #current = choice(self.beginnings) current = self.beginnings[i] output = list(current) in range(self.max): if current in self.ngrams: possible_next = self.ngrams[current] next = choice(possible_next) output.append(next) # last n entries of output; we'll use # ngram in next iteration of 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) line in open("us"): line = line.strip() generator.feed(line) in range(2): print generator.generate(i) print generator.together()
but got error saying:
traceback (most recent call last): file "markovoo2.py", line 112, in <module> print generator.together() attributeerror: 'markovgenerator' object has no attribute 'together'
does know know reason?
it looks def together
indented deeply. inside generate
method. move out 1 indentation level.
Comments
Post a Comment