1

皆さん、私は NLTK チームの公式本に従って NLTK の勉強を始めています。

私は第 5 章「タグ付け」にいますが、PDF 版の 186 ページにある練習問題の 1 つを解決できません。

cfd2['VN'].keys() で指定された過去分詞のリストが与えられたら、そのリスト内の項目の直前にあるすべての単語とタグのペアのリストを収集してみてください。

私はこの方法を試しました:

wsj = nltk.corpus.treebank.tagged_words(simplify_tags=True)

[wsj[wsj.index((word,tag))-1:wsj.index((word,tag))+1] for (word,tag) in wsj if word in cfd2['VN'].keys()]

しかし、それは私にこのエラーを与えます:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/util.py", line 401, in iterate_from
for tok in piece.iterate_from(max(0, start_tok-offset)):
File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/util.py", line 295, in iterate_from
self._stream.seek(filepos)
AttributeError: 'NoneType' object has no attribute 'seek'

wsj 構造体へのアクセスに何か問題があると思いますが、何が問題なのかわかりません!

手伝って頂けますか?

前もって感謝します!

4

3 に答える 3

2

wsjリストのように動作するタイプnltk.corpus.reader.util.ConcatenatedCorpusViewです (これが のような関数を使用できる理由ですindex()) が、「舞台裏」で NLTK はリスト全体をメモリに読み込むことはなく、ファイル オブジェクトから必要な部分のみを読み込みます。CorpusView オブジェクトをindex()反復処理して同時に使用すると (再度反復処理が必要になります)、ファイル オブジェクトは を返すようNoneです。

このように動作しますが、リスト内包表記ほどエレガントではありません。

  for i in range(len(wsj)):
    if wsj[i][0] in cfd2['VN'].keys():
      print wsj[(i-1):(i+1)]
于 2013-04-30T22:14:54.700 に答える