Функция «генерировать» NLTK: Как вернуть возвращаемый текст? - PullRequest
2 голосов
/ 03 октября 2011

Я нуб Питон, так что терпите меня.

Я пытаюсь работать с библиотекой NLTK, и в частности с функцией 'generate'. Из документации видно, что эта функция просто печатает свой результат (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 Это лучшее, на что я могу надеяться?

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Все, что делает 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

И затем вы можете просто вызвать его с переданным вручную экземпляром в качестве первого аргумента.

0 голосов
/ 03 октября 2011

Перейдите в 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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...