Недавно я нашел книгу Шеннона и увидел интересную главу: http://math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf
Я хотел бы создатьФункция в Python такая, что, учитывая текст и заданный порядок, создайте другой текст длиной N с аппроксимацией k-порядка стохастических свойств текста:
def create_text(text, N, n)
Однако я не знаю алгоритмреализовать такую функцию.Я полагаю, что я должен посчитать частоту букв, но как соотнести некоторые буквы с другими в соответствии с заданным порядком?
МОЯ ПОПЫТКА:
Подсчет частот одной буквы легко,Я начал считать частоты двух букв (я думаю, они называются биграммы).Ну, я реализовал рекурсивную функцию, которая, кажется, работает с маленькими тетексами, но с большими они просто превышают глубину рекурсии.Когда я пытался изменить предел глубины рекурсии, то просто зависал.Однако, с маленькими текстами это почти работает:
# Input: text, letter, (recursive argument), dictionary for bigrams
def find_next (txt, x, index_txt, dic):
total = txt.count(x)
current = txt.find(x, index_txt)
if current == -1: return
print (current, txt[current+1])
# Set dictionary
keys = dic.keys()
index_dic = x+txt[current+1]
if index_dic in keys:
dic[index_dic] += 1/total
else:
dic[index_dic] = 1/total
find_next(txt, x, current+1, dic)
Эта функция считает частоту появления буквы x + еще одну.Однако, когда текст заканчивается на x, функция завершается ошибкой из-за выхода за пределы диапазона.Я вижу, что в строке txt [current + 1] ошибка, но я не могу понять, как вернуться назад.Я имею в виду, когда я доберусь до последней буквы, вернитесь к первой и окончите.
Пример:
f = "this is amazing"
Если я не смог найти find_next (f, 'g', 0, {}) функция завершается сбоем в конце, потому что я не знаю, как подключить g к первой букве t.
Я полагаю, это можно решить.Но затем, когда я вычисляю частоты уникальных букв (a, b, c, ...) и затем биграмм (ae, ar, at, bg, bj, ...), что дальше ..?Триграммы и тд?Я не могу понять алгоритм.
Заранее спасибо