2017-03-27 5 views
0

Ich habe eine Liste von Tupeln und ich versuche, die Anzahl der Schlüssel von Tupeln zu zählen. Im Folgenden ist mein Code:Anzahl der POS in (Wort, Pos) Tupel NLTK markierte Sätze

import nltk 
from nltk.corpus import treebank 
from collections import Counter 

# print treebank.fileids() 
treebank_raw = list(treebank.tagged_sents()) ##treebank_raw is a list of list (of tuples)       

treebank_flipped = [] 
treebank_flipped_counter = Counter() 
for sent in treebank_raw: 
    flipped = {b : a.lower() for a, b in sent} 
    treebank_flipped_counter.update(flipped.items()) 

Wenn ich Anzahl der u'VBD‘zählen waren, print treebank_flipped_count enthüllt die alle unabhängigen Fällen werden folgende, wenn in der Tat möchte ich sie zusammen zählen.

(u'VBD', u'said'): 405 
(u'VBD', u'was'): 264 
(u'VBD', u'were'): 138 

So dass 'VBD': (405 + 264 + 138). Wie löse ich Keys von Tupeln auf und zähle sie zusammen?

Antwort

1

Sie können den Großteil des Codes dafür überspringen. Alles, was Sie brauchen, ist:

from nltk.corpus import treebank 
from collections import Counter 

pos_counts = Counter(pos for _, pos in treebank.tagged_sents()) 

Die Variable pos_counts wird zählen, wie oft jeder Teil-of-speech-Tag mit jedem Wort Token auftritt.

(Der _ Teil im Generator Ausdruck bedeutet einfach, dass wir Zeichen in dem Wort nicht interessiert sind. Sie könnten genausogut pos for token, pos in ... schreiben, aber es ist eine Konvention in Python verwenden _ für Wegwerf-Werte.)

0

@lenz Antwort auf die Verwendung der Zähler und Liste Verständnis ist gut.

Aber wenn Sie etwas komplizierteres benötigen, esp. wenn Sie brauchen, um auch das Wort + pos zählt anders als die der pos/Wort zählt abrufen, vielleicht würde dies helfen:

from collections import Counter, defaultdict 
corpus_counts = defaultdict(Counter) 
for word, pos in treebank.tagged_sents(): 
    corpus_counts[pos][word] +=1 

[out]:

>>> corpus_counts['NNPS'] 
Counter({u'Securities': 16, u'Containers': 16, u'Industries': 12, u'Materials': 10, u'Soviets': 8, u'Americans': 6, u'Associates': 5, u'Airlines': 5, u'Savings': 5, u'Motors': 5, u'States': 5, u'Democrats': 5, u'Systems': 4, u'Markets': 4, u'Resources': 4, u'Services': 4, u'Travelers': 4, u'Communications': 4, u'Stores': 3, u'Investors': 3, u'Partners': 3, u'Giants': 3, u'Machines': 3, u'Brothers': 3, u'Philippines': 3, u'Issues': 3, u'Friends': 3, u'Messrs.': 2, u'Laboratories': 2, u'Engineers': 2, u'Futures': 2, u'Burgundies': 2, u'Islands': 2, u'Options': 2, u'Cabernets': 2, u'Nations': 2, u'Instruments': 2, u'Writers': 2, u'Dealers': 2, u'Institutes': 2, u'ADRs': 2, u'Contras': 2, u'Lakes': 1, u'Tots': 1, u'BILLS': 1, u'Manufacturers': 1, u'Republicans': 1, u'Journals': 1, u'Netherlands': 1, u'Notes': 1, u'Products': 1, u'Underwoods': 1, u'Operations': 1, u'ASSETS': 1, u'Facilities': 1, u'Foods': 1, u'Preferences': 1, u'Holdings': 1, u'BRIEFS': 1, u'Dakotas': 1, u'Plains': 1, u'Toys': 1, u'Lawyers': 1, u'Utilities': 1, u'Monopolies': 1, u'Chardonnays': 1, u'Inns': 1, u'Charities': 1, u'Parkinson': 1, u'Fundamentalists': 1, u'Centers': 1, u'Bridges': 1, u'Yorkers': 1, u'SOYBEANS': 1, u'Pictures': 1, u'Rieslings': 1, u'F-series': 1, u'ASSOCIATES': 1, u'RATES': 1, u'Lawmakers': 1, u'Contracts': 1, u'Investments': 1, u'Dolphins': 1, u'Appropriations': 1, u'Mergers': 1, u'Productions': 1, u'Virginians': 1, u'Works': 1, u'Donuts': 1, u'Angels': 1, u'Asians': 1, u'GRAINS': 1, u'Airways': 1, u'Elders': 1, u'Delegates': 1, u'Germans': 1, u'Articles': 1, u'Lines': 1, u'METALS': 1, u'Publications': 1, u'Mercedes': 1, u'Craftsmen': 1, u'Builders': 1, u'Appeals': 1, u'Bricklayers': 1, u'FUNDS': 1, u'Springs': 1}) 

# Count of `Securities|NNPS`: 
>>> corpus_counts['NNPS']['Securities'] 
16 

# Count of all `NNPS`: 
>>> sum(corpus_counts['NNPS'].values())