我有来自link的代码。它返回POS标签及其出现次数。 我如何实现一个代码,而不是输入标签我输入一个句子,它返回它的单词和每个单词的不同pos标签基于语料库(在这种情况下是布朗语料库)。
def findtags(tag_prefix, tagged_text):
cfd = nltk.ConditionalFreqDist((tag, word) for (word, tag) in tagged_text
if tag.startswith(tag_prefix))
return dict((tag, cfd[tag].keys()[:5]) for tag in cfd.conditions())
tagdictNNS = findtags('NNS', nltk.corpus.brown.tagged_words())
for tag in sorted(tagdictNNS):
print tag, tagdictNNS[tag]
for k,v in tagdictNNS.items():
new[k] = len(tagdictNNS[k])
print new
答案 0 :(得分:2)
>>>from nltk.tag import pos_tag
>>>from nltk.tokenize import word_tokenize
>>>sent = "This is a foo bar sentence."
>>>text= pos_tag(word_tokenize(sent))
>>>print(text)
>>>from collections import Counter
>>>count= Counter([j for i,j in pos_tag(word_tokenize(sent))])
>>>print (count)
答案 1 :(得分:1)
如果是英文版,你可以试试这个:
>>> from nltk.tag import pos_tag
>>> from nltk.tokenize import word_tokenize
>>> sent = "This is a foo bar sentence."
>>> pos_tag(word_tokenize(sent))
[('This', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('foo', 'NN'), ('bar', 'NN'), ('sentence', 'NN'), ('.', '.')]
>>> from collections import Counter
>>> Counter([j for i,j in pos_tag(word_tokenize(sent))])
Counter({'NN': 3, 'DT': 2, 'VBZ': 1, '.': 1})
NLTK有一个使用Penn Treebank标签的word tokenization(nltk.tokenize.word_tokenize
和POS tagging(nltk.tag.pos_tag
)的内置模块。然后您只需输入列表将标记句子中的pos标记转换为Counter
。
如果您想将标点符号分组到一个PUNCT
标记中,可以试试这个:
>>> import string
>>> Counter([k if k not in string.punctuation else "PUNCT" for k in [j for i,j in pos_tag(word_tokenize(sent))]])
Counter({'NN': 3, 'DT': 2, 'VBZ': 1, 'PUNCT': 1})
答案 2 :(得分:0)
the documentation(页面底部附近)有一个例子可能是相关的:
nltk.tag
定义了几个标记器,它们采用标记列表(通常是一个句子),为每个标记分配标记,并返回标记标记的结果列表。大多数标记符都是基于训练语料库自动构建的。例如,UnigramTagger
通过检查培训语料库中w的最常用标签来标记每个单词w:
from nltk.corpus import brown
from nltk.tag import UnigramTagger
tagger = UnigramTagger(brown.tagged_sents(categories='news')[:500])
sent = ['Mitchell', 'decried', 'the', 'high', 'rate', 'of', 'unemployment']
for word, tag in tagger.tag(sent):
print(word, '->', tag)
给出了:
Mitchell -> NP
decried -> None
the -> AT
high -> JJ
rate -> NN
of -> IN
unemployment -> None