Cuente verbos, sustantivos y otras partes del discurso con NLTK de Python
-
12-12-2019 - |
Pregunta
Tengo varios textos y me gustaría crear perfiles de ellos en función del uso de varias partes de la oración, como sustantivos y verbos.Básicamente, necesito contar cuántas veces se usa cada parte del discurso.
He etiquetado el texto pero no estoy seguro de cómo continuar:
tokens = nltk.word_tokenize(text.lower())
text = nltk.Text(tokens)
tags = nltk.pos_tag(text)
¿Cómo puedo guardar los recuentos de cada parte del discurso en una variable?
Solución
El pos_tag
El método le devuelve una lista de pares (token, etiqueta):
tagged = [('the', 'DT'), ('dog', 'NN'), ('sees', 'VB'), ('the', 'DT'), ('cat', 'NN')]
Si está utilizando Python 2.7 o posterior, puede hacerlo simplemente con:
>>> from collections import Counter
>>> counts = Counter(tag for word,tag in tagged)
>>> counts
Counter({'DT': 2, 'NN': 2, 'VB': 1})
Para normalizar los recuentos (dándole la proporción de cada uno), haga:
>>> total = sum(counts.values())
>>> dict((word, float(count)/total) for word,count in counts.items())
{'DT': 0.4, 'VB': 0.2, 'NN': 0.4}
Tenga en cuenta que en versiones anteriores de Python, deberá implementar Counter
tú mismo:
>>> 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow