import nltk
from nltk import word_tokenizer
w="cat"
word=nltk.word_tokenize(w)
print nltk.pos_tag(word)
output:[('cat','IN')]
但 cat 是一个名词,但它返回为 IN(连词(。
POS 标记在句子上下文之外效果不佳。将整个句子输入到pos_tag
而不是单个单词,然后重试。如果它不起作用,请使用nltk.download()
获取更好的POS标记模型并运行它。
如果您需要单个单词的所有POS标签,请尝试WordNet:
In [9]: nltk.corpus.wordnet.synsets('cat')
Out[9]:
[Synset('cat.n.01'),
Synset('guy.n.01'),
Synset('cat.n.03'),
Synset('kat.n.01'),
Synset("cat-o'-nine-tails.n.01"),
Synset('caterpillar.n.02'),
Synset('big_cat.n.01'),
Synset('computerized_tomography.n.01'),
Synset('cat.v.01'),
Synset('vomit.v.01')]
(如您所见,您可能需要过滤这些内容。
使用预训练模型尝试hunpos
,en_wsj.model
:
$ gzip -d en_wsj.model.gz
$ wget https://hunpos.googlecode.com/files/en_wsj.model.gz
$ python
>>> from nltk.tag.hunpos import HunposTagger
>>> from nltk.tokenize import word_tokenize
>>> sent = "cat"
>>> ht = HunposTagger('en_wsj.model')
>>> print ht.tag(word_tokenize(sent))
[('cat', 'NN')]
请参阅如何在 nltk 中使用 hunpos 标记文本文件?,hunpos 总是比 NLTK 中的默认pos_tag
做得更好。