Считайте глаголы, существительные и другие части речи с NLTK Python

У меня есть несколько текстов, и я хотел бы создать их профили, основываясь на использовании ими различных частей речи, таких как существительные и глаголы. По сути, мне нужно посчитать, сколько раз каждая часть речи используется.

Я пометил текст, но не уверен, как идти дальше:

tokens = nltk.word_tokenize(text.lower())
text = nltk.Text(tokens)
tags = nltk.pos_tag(text)

Как я могу сохранить счет для каждой части речи в переменной?

1 ответ

Решение

pos_tag Метод возвращает список пар (токен, тег):

tagged = [('the', 'DT'), ('dog', 'NN'), ('sees', 'VB'), ('the', 'DT'), ('cat', 'NN')] 

Если вы используете Python 2.7 или более позднюю версию, то вы можете сделать это просто:

>>> from collections import Counter
>>> counts = Counter(tag for word,tag in tagged)
>>> counts
Counter({'DT': 2, 'NN': 2, 'VB': 1})

Для нормализации подсчета (давая вам пропорцию каждого) сделайте:

>>> total = sum(counts.values())
>>> dict((word, float(count)/total) for word,count in counts.items())
{'DT': 0.4, 'VB': 0.2, 'NN': 0.4}

Обратите внимание, что в старых версиях Python вам придется реализовать Counter сам:

>>> from collections import defaultdict
>>> counts = defaultdict(int)
>>> for word, tag in tagged:
...  counts[tag] += 1

>>> counts
defaultdict(<type 'int'>, {'DT': 2, 'VB': 1, 'NN': 2})
Другие вопросы по тегам