2012-01-07 2 views
0

テキストを見て、以前の文字のペアに関する文字の頻度を返すカウンタを取得しようとしています。 例えば、出力の一部は次のようになります。後続の文字のトリプル用のカウンタを作成

'th' : Counter ({'e':119, 'a':145 etc... }) 

私はそれが小文字のすべての可能なペアを反復処理します。

def pairwise(iterable): 
    it = iter(iterable) 
    last = next(it) 
    for curr in it: 
     yield last, curr 
     last = curr 

valid = set('abcdefghijklmnopqrstuvwxyz ') 

def valid_pair((last, curr)): 
    return last in valid and curr in valid 

def make_markov(text): 
    markov = defaultdict(Counter) 
    lowercased = (c.lower() for c in text) 
    for p, q in ifilter(valid_pair, pairwise(lowercased)): 
     markov[p][q] += 1 
    return markov 
+0

は、あなたがそのコードにインデントを修正することができます

今まで、私は唯一のアカウントに前の手紙を受け取り、出力を取得するには、次のコードを使用しています? – DaedalusFall

+0

@DaedalusFall yepごめんなさい – Julia

答えて

1

未テスト:

def pairwise(iterable): 
    it = iter(iterable) 
    last = next(it)+next(it) 
    for curr in it: 
     yield last, curr 
     last = last[1]+curr 


def valid_pair((last, curr)): 
    return last[0] in valid and last[1] in valid and curr in valid 
関連する問題