2011-10-02 7 views
2

私はPythonのnoobだから、私に同行してください。NLTK "generate"関数:返されたテキストを返すには?

私は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これは私が願っている最高のものですか?

答えて

2

が存在しない場合generateがやっているすべては、その後、

text = self._trigram_model.generate(length) 

やラッピングを呼び出し、それを印刷し、トライグラムモデルを生成しています。

上記の行(selfをインスタンス名に置き換えたもの)、または可能であれば全体を次のようにして、最後のprintreturnに置き換えてください。

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

こんにちはAGF、応答のための感謝を。私は少し混乱している。この関数を渡す手動で渡されたインスタンスは何でしょうか? – thekevinscott

+0

@thekevinscottあなたが 'obj.generate()'を呼び出すオブジェクトがあれば、代わりに 'text = generate(obj)'を呼び出します。 – agf

+0

cool、thanks man – thekevinscott

-1

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` 
+6

サイトパッケージで 'generate'を変更しないでください。これは_terrible_アイデアです。最初に別のプロジェクトのために書かれたものを使用しようとしたり、内部的に呼び出されたりするとどうなりますか? – agf

+0

あなたが実際にパッケージfnにパッチを当てたい場合は、関数 'my_hacked_generate()'を定義し、 'import nltk'の後に' nltk.parse.generate = my_hacked_generate'を実行することです。 (cc:@agf)しかし、ソースファイルには触れないでください。 – smci

関連する問題