2017-03-27 10 views
0

私はタプルのリストを持っており、タプルのキーの数を数えようとしています。私はu'VBD」の数をカウントした場合print treebank_flipped_countは、実際に、私はそれらを一緒にカウントしたい場合、すべての独立した例であることを明らかにし、以下、NLTKのタグ付き文の(単語、pos)タプルのPOSの数をカウントする

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()) 

:以下は私のコードです。

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

したがって、u'VBD 'は(405 + 264 + 138)です。どのようにしてタプルのキーを解散させ、それらをすべて数えますか?

答えて

1

ほとんどのコードをスキップできます。 必要なのは次のとおりです。

from nltk.corpus import treebank 
from collections import Counter 

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

変数pos_countsは、各品詞タグは任意の単語トークンで発生した回数をカウントします。

(ジェネレータ式で_部分は、単にあなただけのようにもpos for token, pos in ...を書くことができます。私たちは、トークン言葉に興味を持っていないことを意味しますが、それはスローアウェイの値について_を使用するには、Pythonで大会です。)

0

@lenzカウンターを使用して回答し、リストの理解が良好です。

しかし、もっと複雑なものが必要な場合は、あなたはまた、POS /ワードカウント以外の単語+ posのカウントを取得する必要がある場合、多分これは役立つだろう:

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

[出]:

>>> 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()) 
関連する問題