Создать счетчик для тройки последующих букв - PullRequest
0 голосов
/ 07 января 2012

Я пытаюсь получить счетчик, который просматривает текст и возвращает частоту буквы относительно предыдущей пары букв.Например, часть вывода будет выглядеть так:

'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

1 Ответ

1 голос
/ 07 января 2012

Не проверено:

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
...