Frage

Ich habe mehrere Texte und möchte Profile von ihnen erstellen, die auf der Verwendung verschiedener Wortarten wie Substantiven und Verben basieren.Grundsätzlich muss ich zählen, wie oft jeder Teil der Sprache verwendet wird.

Ich habe den Text markiert, bin mir aber nicht sicher, wie ich weiter vorgehen soll:

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

Wie kann ich die Anzahl für jede Wortart in einer Variablen speichern?

War es hilfreich?

Lösung

Der pos_tag methode gibt Ihnen eine Liste von (Token-, Tag-) Paaren zurück:

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

Wenn Sie Python 2.7 oder höher verwenden, können Sie dies einfach mit tun:

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

Um die Zählungen zu normalisieren (geben Sie den Anteil von jedem an), tun Sie Folgendes:

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

Beachten Sie, dass Sie in älteren Versionen von Python Folgendes implementieren müssen Counter Sie:

>>> 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})
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top