Вы можете выполнить n-грамм анализ некоторого текста и использовать его в качестве основы для систематической ошибки.Вы можете сделать это либо буквами, либо слогами.Выполнение анализа по слогам, вероятно, более сложное.
Сделать это буквально легко.Вы просматриваете каждый символ в исходном тексте и отслеживаете последние n-1 символов, с которыми вы столкнулись.Затем для каждого следующего символа вы добавляете последние n-1 символов и этот новый (n-грамм) в таблицу частот.
Как выглядит эта таблица частот?Вы можете использовать карту, отображающую n-граммы на их частоты.Но этот подход не очень хорош для алгоритма, который я предлагаю ниже.Для этого лучше сопоставить каждую (n-1) -грамму карте последней буквы n-грамма с ее частотой.Примерно так: std::map<std::string, std::map<char,int>>
.
После анализа и сбора статистики алгоритм будет выглядеть следующим образом:
- выбрать случайный начальный n-грамм.Ваш предыдущий анализ может содержать взвешенные данные, для которых буквы обычно начинаются с слов:
- из всех n-граммов, начинающихся с предыдущих n-1 букв, выбрать случайную последнюю букву (с учетом весов из анализа);
- повторять до тех пор, пока вы не достигнете конца слова (используя предварительно определенную длину или данные о конечных частотах слова);
Чтобы выбрать случайные значения из набора значений с различными весамиВы можете начать с настройки таблицы совокупных частот.Затем вы выбираете случайное число между значениями, меньшими суммы частот, и видите, в какой интервал оно падает.
Например:
- A происходит 10 раз;
- B происходит 7 раз;
- C происходит 9 раз;
Вы строите следующую таблицу: {A: 10, B: 17, C: 26}.Вы выбираете число от 1 до 26. Если оно меньше 10, это A;если оно больше или равно 10, но меньше 17, это B;если оно больше 17, это C.