Pergunta

Eu tenho vários textos e gostaria de criar perfis de com base na utilização de várias partes do discurso, como substantivos e verbos.Basially, eu preciso contar quantas vezes cada parte do discurso é usado.

Eu tenho marcado o texto, mas não tenho certeza de como ir mais longe:

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

Como posso salvar as contagens para cada parte do discurso em uma variável?

Foi útil?

Solução

O pos_tag método dá a você uma lista de (token, tag) pares:

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

Se você estiver usando Python 2.7 ou posterior e, em seguida, você pode fazê-lo simplesmente com:

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

Para normalizar a conta (dando-lhe a proporção de cada um) o que fazer:

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

Note que em versões mais antigas do Python, você terá que implementar Counter a si mesmo:

>>> 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})
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top