Python 为后续字母的三元组创建计数器

Python 为后续字母的三元组创建计数器,python,counter,Python,Counter,我试图得到一个计数器,它可以查看文本并返回一个字母相对于前一对字母的频率。 例如,部分输出为: 'th' : Counter ({'e':119, 'a':145 etc... }) 我希望它迭代所有可能的小写字符对 到目前为止,我一直在使用以下代码获得只考虑上一个字母的输出: def pairwise(iterable): it = iter(iterable) last = next(it) for curr in it: yield last, c

我试图得到一个计数器,它可以查看文本并返回一个字母相对于前一对字母的频率。 例如,部分输出为:

'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
未经测试:

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

你能修正代码上的缩进吗?