有没有一种简单的方法可以在没有上下文的情况下使用nltk 确定给定单词的最可能的词性标记.或者,如果不使用任何其他工具/数据集.
我试图使用wordnet,但似乎sysnets不是按可能性排序的.
>>> wn.synsets('says')
[Synset('say.n.01'), Synset('state.v.01'), ...]
Run Code Online (Sandbox Code Playgroud)
如果你想在没有上下文的情况下尝试标记,那么你正在寻找某种unigram标记器,也就是说looup tagger.unigram标记器仅根据给定单词的标记的频率标记单词.因此它避免了上下文启发式,但是对于任何标记任务,您必须拥有数据.而对于unigrams你需要注释数据来训练它.请参阅lookup taggernltk教程http://nltk.googlecode.com/svn/trunk/doc/book/ch05.html.
下面是培训/测试unigram标记器的另一种方法 NLTK
>>> from nltk.corpus import brown
>>> from nltk import UnigramTagger as ut
>>> brown_sents = brown.tagged_sents()
# Split the data into train and test sets.
>>> train = int(len(brown_sents)*90/100) # use 90% for training
# Trains the tagger
>>> uni_tag = ut(brown_sents[:train]) # this will take some time, ~1-2 mins
# Tags a random sentence
>>> uni_tag.tag ("this is a foo bar sentence .".split())
[('this', 'DT'), ('is', 'BEZ'), ('a', 'AT'), ('foo', None), ('bar', 'NN'), ('sentence', 'NN'), ('.', '.')]
# Test the taggers accuracy.
>>> uni_tag.evaluate(brown_sents[train+1:]) # evaluate on 10%, will also take ~1-2 mins
0.8851469586629643
Run Code Online (Sandbox Code Playgroud)
我不建议使用WordNet进行pos标记,因为只有很多单词仍然没有wordnet中的条目.但是你可以看一下在wordnet中使用引理频率,看看如何在NLTK中获得一个synset的字网感知频率?.这些频率基于SemCor语料库(http://www.cse.unt.edu/~rada/downloads.html)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |