2017-04-05 56 views
2

有沒有一種方法可以統計每個元組在這個標記列表中出現的次數?在列表中出現Python計數元組

我試過count方法,但它不起作用。

這是列表:

['hello', 'how', 'are', 'you', 'doing', 'today', 'are', 'you', 'okay'] 

這些都是根據名單上的元組:

('hello', 'how') 
('how', 'are') 
('are','you') 
('you', 'doing') 
('doing', 'today') 
('today', 'are') 
('you', 'okay') 

我想結果是這樣的

('hello', 'how')1 
('how', 'are')1 
('are','you')2 
('you', 'doing')1 
('doing', 'today')1 
('today', 'are')1 
('you', 'okay')1 
+1

如何使用「計數器」? –

+1

令牌必須在列表中彼此相鄰以匹配元組嗎? – chbchb55

+1

@ chbchb55:這或多或少是一個* n * -gram的概念。 –

回答

5

你可以輕鬆使用Counter。一個通用的函數來計算ň -grams如下:

from collections import Counter 
from itertools import islice 

def count_ngrams(iterable,n=2): 
    return Counter(zip(*[islice(iterable,i,None) for i in range(n)]))

這產生:

>>> count_ngrams(['hello', 'how', 'are', 'you', 'doing', 'today', 'are', 'you', 'okay'],2) 
Counter({('are', 'you'): 2, ('doing', 'today'): 1, ('you', 'doing'): 1, ('you', 'okay'): 1, ('today', 'are'): 1, ('how', 'are'): 1, ('hello', 'how'): 1}) 
>>> count_ngrams(['hello', 'how', 'are', 'you', 'doing', 'today', 'are', 'you', 'okay'],3) 
Counter({('are', 'you', 'okay'): 1, ('you', 'doing', 'today'): 1, ('are', 'you', 'doing'): 1, ('today', 'are', 'you'): 1, ('how', 'are', 'you'): 1, ('doing', 'today', 'are'): 1, ('hello', 'how', 'are'): 1}) 
>>> count_ngrams(['hello', 'how', 'are', 'you', 'doing', 'today', 'are', 'you', 'okay'],4) 
Counter({('doing', 'today', 'are', 'you'): 1, ('today', 'are', 'you', 'okay'): 1, ('are', 'you', 'doing', 'today'): 1, ('how', 'are', 'you', 'doing'): 1, ('you', 'doing', 'today', 'are'): 1, ('hello', 'how', 'are', 'you'): 1}) 
5

這種解決方案需要一個第三方模塊(iteration_utilities.Iterable),但應該做你想要什麼:

>>> from iteration_utilities import Iterable 

>>> l = ['hello', 'how', 'are', 'you', 'doing', 'today', 'are', 'you', 'okay'] 

>>> Iterable(l).successive(2).as_counter() 
Counter({('are', 'you'): 2, 
     ('doing', 'today'): 1, 
     ('hello', 'how'): 1, 
     ('how', 'are'): 1, 
     ('today', 'are'): 1, 
     ('you', 'doing'): 1, 
     ('you', 'okay'): 1}) 
+0

謝謝!你知道我應該怎麼做,如果我想使用n-grams作爲詞彙,然後在許多列表中檢查這個詞彙嗎? – MyTivoli

+0

不確定你的意思。也許這可能需要另一個問題,你可以更清楚地解釋你需要什麼。 – MSeifert