2012-05-20 2 views
15

У меня есть несколько текстов, и я хотел бы создавать их профили, основываясь на их использовании различных частей речи, таких как существительные и глаголы. В принципе, мне нужно подсчитать, сколько раз используется каждая часть речи.Количество глаголов, существительных и других частей речи с python's NLTK

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

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

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

+0

Вы пришли через 'collections.Counter'? – katrielalex

ответ

26

Метод 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}) 
+0

Это абсолютно потрясающе, спасибо. Я использую Python 2.7. Есть ли способ, который я могу теперь выяснить, какая доля помеченного текста использует каждую часть речи? Например, разделив число существительных на общие теги и умножив на 100 (чтобы получить процент) ... но делая это для всего? Получите результаты, например: 23% существительные, 14% глаголов и так далее? – Zach

+0

@ Zach, я добавил кое-что о нормализации счета для вас. – dhg

+0

@dgh, спасибо, что он отлично работает. Последний вопрос, знаете ли вы, какой набор тегов используется nltk.pos_tag()? например Браун, Пенн Трибанк и т. Д.? – Zach

 Смежные вопросы

  • Нет связанных вопросов^_^