2017-12-05 21 views
0

NLTKを使用してテキスト内の単語を検索しています。一致関数の結果をリストに保存する必要があります。質問はすでにhere と尋ねられますが、私は変更を見ることができません。NLTKの一致結果をリストに保存するにはどうすればよいですか?

type(text.concordance('myword')) 

結果ました:私はによって機能のreturnde値の型を探してみてください

<class 'NoneType'> 
+0

が重複する可能性:テキストファイルへの出力をキャプチャする方法? (現在は530行のうち25行しかキャプチャされていません)](https://stackoverflow.com/questions/11044072/python-how-to-capture-output-to-a-text-file-only-25-of-530-lines -captured-now) –

+0

私はこの投稿を見ましたが、私はファイルを渡すのを避けることを好む。 – samara

+0

コンコードはstdoutでしかキャプチャできませんが、コンコーダンスを保存する方法はありませんが、PRはあります:https://github.com/nltk/nltk/pull/1333 – alvas

答えて

1

ConcordanceIndexのソースを調べると、結果がstdoutに出力されていることがわかります。 redirecting stdout to a fileがオプションでない場合は、ConcordanceIndex.print_concordanceを再実装して、stdoutに出力するのではなく結果を返すようにする必要があります。

コード:

def concordance(ci, word, width=75, lines=25): 
    """ 
    Rewrite of nltk.text.ConcordanceIndex.print_concordance that returns results 
    instead of printing them. 

    See: 
    http://www.nltk.org/api/nltk.html#nltk.text.ConcordanceIndex.print_concordance 
    """ 
    half_width = (width - len(word) - 2) // 2 
    context = width // 4 # approx number of words of context 

    results = [] 
    offsets = ci.offsets(word) 
    if offsets: 
     lines = min(lines, len(offsets)) 
     for i in offsets: 
      if lines <= 0: 
       break 
      left = (' ' * half_width + 
        ' '.join(ci._tokens[i-context:i])) 
      right = ' '.join(ci._tokens[i+1:i+context]) 
      left = left[-half_width:] 
      right = right[:half_width] 
      results.append('%s %s %s' % (left, ci._tokens[i], right)) 
      lines -= 1 

    return results 

使用法:[パイソンの

from nltk.book import text1 
from nltk.text import ConcordanceIndex 

ci = ConcordanceIndex(text1.tokens) 
results = concordance(ci, 'circumstances') 

print(type(results)) 
<class 'list'> 
+0

この機能は人々がNLTKで見たいと思うものですか?もしそうなら、https://github.com/nltk/nltk/pull/1333にいくつかの愛を与えてください。これを適切なnltk関数に押し込むことができるかどうかがわかります。 – alvas

0

は、テキストの一致を使用するには、NLTK Text()オブジェクトをインスタンス化してからconcordance()メソッドを使用する必要がありますそのオブジェクト上:ここ

import nltk.corpus 
from nltk.text import Text 
moby = Text(nltk.corpus.gutenberg.words('melville-moby_dick.txt')) 

は、我々はテキストファイルmelville-moby_dick.txt上のテキストオブジェクトをインスタンス化し、我々はこの方法を使用することができます:

moby.concordance("monster") 

あなたがここに非型を持っている場合、それはあなたがどんなTextオブジェクトを作成していなかったので、自分の変数textNoneであるためであるとseeems。

+0

完全なコードは書きませんでしたが、テキストはNLTK Textオブジェクトでした。私はconcordanceメソッドの戻り値の型をチェックするこのコード行を投稿します – samara

関連する問題