【问题标题】:NLTK "generate" function: How to get back returned text?NLTK“生成”功能:如何取回返回的文本?
【发布时间】:2011-11-29 14:25:55
【问题描述】:

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

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

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

更新:我发现这个链接有点作用,但感觉非常糟糕。 http://northernplanets.blogspot.com/2006/07/capturing-output-of-print-in-python.html这是我所希望的最好的吗?

【问题讨论】:

    标签: python nltk


    【解决方案1】:

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

    text = self._trigram_model.generate(length)
    

    并包装和打印它。

    只取你想要的部分——可能只是上面的行(self 替换为实例名称),或者可能是整个内容,如下所示,最后的 print 替换为 return

    def generate(self, length=100):
        if '_trigram_model' not in self.__dict__: 
            estimator = lambda fdist, bins: LidstoneProbDist(fdist, 0.2)
            self._trigram_model = NgramModel(3, self, estimator)
        text = self._trigram_model.generate(length)
        return tokenwrap(text) # or just text if you don't want to wrap
    

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

    【讨论】:

    • 您好 agf,感谢您的回复;不过我有点困惑。我将传递此函数的手动传递实例是什么?
    • @thekevinscott 无论你在什么对象上调用obj.generate(),你都调用text = generate(obj)
    【解决方案2】:

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

         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`
    

    【讨论】:

    • 您不应该更改站点包中的generate - 这是一个可怕的想法。当您尝试将它用作最初为另一个项目编写的,或者它被内部调用等时会发生什么?
    • 如果你真的想要修补某些包 fn,更好的方法是定义你的函数my_hacked_generate(),然后在import nltk 之后执行nltk.parse.generate = my_hacked_generate。 (cc: @agf) 但不要碰源文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2016-10-22
    • 2017-05-12
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多