在nltk中训练Brill tagger,AttributeError:' module'对象没有属性' SymmetricProximateTokensTemplate'

时间:2015-08-25 20:28:43

标签: python nltk pos-tagger

我正在训练Brill tagger反对conll2000语料库。由于我不理解的原因,我遇到以下错误:

brill.SymmetricProximateTokensTemplate(brill.ProximateTagsRule,(1,1)), AttributeError:'模块'对象没有属性' SymmetricProximateTokensTemplate'

我正在关注[this](http://streamhacker.com/2008/12/03/part-of-speech-tagging-with-nltk-part-3/)教程。代码如下:

import nltk.tag
from nltk.tag import brill

raubt_tagger = backoff_tagger(train_sents, [nltk.tag.AffixTagger,
    nltk.tag.UnigramTagger, nltk.tag.BigramTagger, nltk.tag.TrigramTagger],
    backoff=nltk.tag.RegexpTagger(word_patterns))

templates = [
    brill.SymmetricProximateTokensTemplate(brill.ProximateTagsRule, (1,1)),
    brill.SymmetricProximateTokensTemplate(brill.ProximateTagsRule, (2,2)),
    brill.SymmetricProximateTokensTemplate(brill.ProximateTagsRule, (1,2)),
    brill.SymmetricProximateTokensTemplate(brill.ProximateTagsRule, (1,3)),
    brill.SymmetricProximateTokensTemplate(brill.ProximateWordsRule, (1,1)),
    brill.SymmetricProximateTokensTemplate(brill.ProximateWordsRule, (2,2)),
    brill.SymmetricProximateTokensTemplate(brill.ProximateWordsRule, (1,2)),
    brill.SymmetricProximateTokensTemplate(brill.ProximateWordsRule, (1,3)),
    brill.ProximateTokensTemplate(brill.ProximateTagsRule, (-1, -1), (1,1)),
    brill.ProximateTokensTemplate(brill.ProximateWordsRule, (-1, -1), (1,1))
]

trainer = brill.FastBrillTaggerTrainer(raubt_tagger, templates)
braubt_tagger = trainer.train(train_sents, max_rules=100, min_score=3)

2 个答案:

答案 0 :(得分:0)

您可能会因为使用NLTK 3而获得这些错误,其中一些Brill标记代码已更改,包括模板。有关详细信息,请参阅this answer

答案 1 :(得分:0)

正如之前的评论者提到的那样,使用NLTK 3对Brill tagger进行了更改。我在这里创建了一个nltk-trainer存储库的分支:

https://github.com/burgersmoke/nltk-trainer

Brill tagger的这个fork的唯一变化是在这个文件中:

https://github.com/burgersmoke/nltk-trainer/blob/master/nltk_trainer/tagging/training.py