2017-03-27 10 views
0

나는 튜플 목록을 가지고 있으며 튜플 키 수를 계산하려고합니다. 내가 u'VBD '의 수를 계산한다면 print treebank_flipped_count 사실 내가 함께 계산 할 때 모든 독립적 인 경우로 다음과 같은 계시,NLTK 태그가있는 문장의 (단어, 위치) 튜플에있는 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 ...을 작성할 수 있습니다. 우리가 워드 토큰에 관심이없는 것을 의미하지만 던져 - 멀리 값에 _를 사용하는 파이썬의 규칙입니다.)

0

@lenz 카운터를 사용하여 대답하고 목록을 이해하는 것이 좋습니다.

하지만 좀 더 복잡한 것이 필요한 경우에는 esp. 당신은 또한는 POS/워드 카운트 이외의 단어 + POS 카운트를 검색 할 때, 어쩌면이 도움이 될 :

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