2017-04-05 3 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 *グラムの考えです。 –

答えて

5

次のようなものになりたいですそのために簡単にCounterを使用できます。 nは -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グラムをボキャブラリとして使用したい場合、どのようにすればよいのか分かりますか?そして、このボキャブラリを多くのリストからチェックしてください。 – MyTivoli

+0

あなたは何を意味するのかよく分かりません。おそらく、あなたが必要とするものをより明確に説明できる別の質問が必要なのかもしれません。 – MSeifert

関連する問題