0

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

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

The Project Gutenberg EBook of My Man Jeeves, by P. G. Wodehouse
#27 in our series by P. G. Wodehouse

Copyright laws are changing all over the world. Be sure to check the
copyright laws for your country before downloading or redistributing
this or any other Project Gutenberg eBook.

This header should be the first thing seen when viewing this Project
Gutenberg file.  Please do not remove it.  Do not change or edit the
header without written permission.

Please read the "legal small print," and other information about the
eBook and Project Gutenberg at the bottom of this file.  Included is
important information about your specific rights and restrictions in
how the file may be used.  You can also find out about how to make a
donation to Project Gutenberg, and how to get involved.

etc etc etc

接下来我有我正在尝试使用的课程:

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)

最后给出错误的主要内容:“'Markov'对象没有属性'file_to_words'”

import Class
file_ = open('derp.txt')
markov = Class.Markov(file_)
markov.generate_markov_text()

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

4

2 回答 2

2

您需要缩进该file_to_words方法,使其成为 Markov 类的一部分。您目前拥有它的方式是函数中的模块级Class函数。将file_to_words方法中的所有内容(包括def行)向右移动 4 个空格。

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

于 2012-11-24T03:09:01.383 回答
1

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

于 2012-11-24T03:09:28.607 回答