2

nltk で品詞 (または POS) タガーを作成しようとしましたが、バックオフを使用して一度に複数の ngram タガーで動作させることができません。より高いスコアを得るために、より多くのタガーを使用していると読みましたが、私にはうまくいきません。最初はより多くの単語を使用し、次に使用する単語を 1 つに減らしたいと考えています。こんな感じでやってみたのですが、

import nltk
from nltk.corpus import brown

#sentence =  brown.sents(categories = "news")
trains = brown.tagged_sents(categories = "news")


from nltk import NgramTagger

fortest = ["hi", "how","are", "you"]

tagger = (nltk.NgramTagger (n, trains, backoff=n-1) for n in range (3))
print tagger.tag(fortest)

しかし、エラー AttributeError: 'generator' object has no attribute 'tag' が表示されます

だから私はリストなしでそれを作ります:

for n in range(3):
    tagger = nltk.NgramTagger(n, trains, backoff=n-1)

しかし、私は得る:

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nltk/tag/sequential.py", line 271, in __init__
  ContextTagger.__init__(self, model, backoff)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nltk/tag/sequential.py", line 121, in __init__
  SequentialBackoffTagger.__init__(self, backoff)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nltk/tag/sequential.py", line 46, in __init__
  self._taggers = [self] + backoff._taggers AttributeError: 'int' object has no attribute '_taggers'

私はPythonを初めて使用するので、助けていただければ幸いです。

4

2 に答える 2

1

パラメータ backoff は、現在のタガーが最善を尽くしたときに使用される別のタガーを指す必要があります。2 番目のタガーを定義するか、デフォルトを使用してから、それを使用するようにコードを変更する必要があります。このようなもの:

default_tagger = nltk.data.load(nltk.tag._POS_TAGGER)
tagger = nltk.NgramTagger(n, trains, backoff=default_tagger)
于 2013-06-23T21:17:58.863 に答える