Существует более эффективный способ подсчета биграфов: с Counter
. Начните с чтения текста (если он не слишком большой):
from collections import Counter
with open("input.txt") as content_file:
content = content_file.read()
Отфильтровать не-буквы:
letters = list(filter(str.isalpha, content))
Вам, вероятно, следует также преобразовать все буквы в нижний регистр, но это зависит от вас:
letters = letters.lower()
Создайте молнию из оставшихся букв с собой, смещенную на одну позицию, и подсчитайте большие графы:
cntr = Counter(zip(letters, letters[1:]))
Нормализуйте словарь:
total = len(cntr)
{''.join(k): v / total for k,v in cntr.most_common()}
#{'ow': 0.1111111111111111, 'He': 0.05555555555555555...}
Решение можно легко обобщить на триграфы и т. Д., Изменив счетчик:
cntr = Counter(zip(letters, letters[1:], letters[2:]))