创建默认标记器 Python NLTK

Creating a Default Tagger Python NLTK

我正在尝试使用 NLTK 在 python 上创建默认标记器,但我一直收到错误消息。由爱沙尼亚语单词组成的语料库,重点是标记每个单词的词性。

我的代码:

from nltk.corpus.reader import TaggedCorpusReader
mypath = "/Users/mmo/Downloads/"

EC = TaggedCorpusReader(mypath,"estonianSmall_copy.txt",
 encoding="latin-1")
sents = EC.tagged_sents()


from nltk import DefaultTagger
from nltk.probability import FreqDist

tags =[ [(word,tag)for word,tag in sent]\
    for sent in EC.tagged_sents()]
tagF = FreqDist(tags)

错误:

tagF = FreqDist(tags)
Traceback (most recent call last):

   File "<ipython-input-26-c1ca76857fce>", line 1, in <module>
    tagF = FreqDist(tags)

  File "/Users/mmo/anaconda/lib/python2.7/site-packages/nltk/probability.py", line 106, in __init__
    Counter.__init__(self, samples)

  File "/Users/mmo/anaconda/lib/python2.7/collections.py", line 477, in __init__
    self.update(*args, **kwds)

  File "/Users/mmo/anaconda/lib/python2.7/collections.py", line 567, 
in update
    self[elem] = self_get(elem, 0) + 1

TypeError: unhashable type: 'list'

您的问题出在 FreqDist -- 您还没有开始创建默认标注器。由于您只是想对标签进行计数,因此将标签提供给 FreqDist,如下所示:

tagF = FreqDist(tag for word, tag in EC.tagged_words())

(请注意,tagged_words() returns 是一个平面序列,而不是列表的列表。) 然后您可以继续使用 nltk 教程来构建您的默认标记器。