Contare i verbi, i nomi e altre parti del discorso con il NLTK di Python
-
12-12-2019 - |
Domanda
Ho più testi e vorrei creare profili di loro in base al loro utilizzo di varie parti del discorso, come nomi e verbi.Bassi, ho bisogno di contare quante volte viene utilizzata ogni parte del discorso.
Ho taggato il testo ma non sono sicuro di come andare oltre:
tokens = nltk.word_tokenize(text.lower())
text = nltk.Text(tokens)
tags = nltk.pos_tag(text)
.
Come posso salvare i conteggi per ogni parte del discorso in una variabile?
Soluzione
Il metodo pos_tag
restituisce un elenco di (token, tag) coppie:
tagged = [('the', 'DT'), ('dog', 'NN'), ('sees', 'VB'), ('the', 'DT'), ('cat', 'NN')]
.
Se stai usando Python 2.7 o successivo, puoi farlo semplicemente con:
>>> from collections import Counter
>>> counts = Counter(tag for word,tag in tagged)
>>> counts
Counter({'DT': 2, 'NN': 2, 'VB': 1})
.
per normalizzare i conteggi (dandoti la proporzione di ciascuno):
>>> total = sum(counts.values())
>>> dict((word, float(count)/total) for word,count in counts.items())
{'DT': 0.4, 'VB': 0.2, 'NN': 0.4}
.
Si noti che nelle versioni precedenti di Python, dovrai implementare Counter
da solo:
>>> 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})
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow