我是一个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这是我能想到的最好的吗?
答案 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`