import random def train(text, max_len=5): model = dict() for i in range(1, max_len+1): model[i] = dict() for k in range(len(text) - i - 1): if not text[k:k+i] in model[i]: model[i][text[k:k+i]] = dict() if text[k+i] in model[i][text[k:k+i]]: model[i][text[k:k+i]][text[k+i]] += 1 else: model[i][text[k:k+i]][text[k+i]] = 1 return model def query(model, previous): for l in range(len(previous), 0, -1): if previous[-l:] not in model[l]: continue freqs = model[l][previous[-l:]] return random.choices(list(freqs.keys()), list(freqs.values()))[0]