NLTK“生成”功能:如何获取返回的文本?

时间:2011-10-02 23:14:10

标签: python nltk

我是一个Python菜鸟,所以请耐心等待。

我正在尝试使用NLTK库,特别是'generate'函数。从文档中看,这个函数只是打印其结果(http://nltk.googlecode.com/svn/trunk/doc/api/nltk.text-pysrc.html)。我想在将它打印到屏幕之前操作生成的文本,但我似乎无法弄清楚如何让这个函数返回它的文本。

我如何获得此功能的输出?我是否必须更改函数以返回结果而不是打印它?

更新:我发现这个链接有点做了,但感觉非常hacky。 http://northernplanets.blogspot.com/2006/07/capturing-output-of-print-in-python.html这是我能想到的最好的吗?

2 个答案:

答案 0 :(得分:2)

所有generate正在做的是生成一个三元模型(如果不存在),然后调用

text = self._trigram_model.generate(length)

并包装和打印它。

只需获取您想要的部分 - 可能只是上面一行(self替换为实例名称),或者可能是整个事情,如下所示,最后print替换为{ {1}}。

return

然后你可以用手动传递的实例作为第一个参数来调用它。

答案 1 :(得分:-1)

进入Python26 / site-packages / nltk / text.py并更改“generate”函数:

     def generate(self, length=100):
        if '_trigram_model' not in self.__dict__:
            print "Building ngram index..."
            estimator = lambda fdist, bins: LidstoneProbDist(fdist, 0.2)
            self._trigram_model = NgramModel(3, self, estimator)
        text = self._trigram_model.generate(length)
        text_gen = tokenwrap(text)
        print text_gen
        return text_gen`