Сохранен 30
https://2ch.hk/pr/res/451399.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Частотный анализ текста

 Аноним 17/03/15 Втр 16:09:21 #1 №451399 
14265977614730.jpg
14265977614961.png
14265977614972.png
Сап, любители криптоанализа и мамкины шифровальщики. Есть одна задачка. Коротко о главном:
Дается текст, в котором только русские буквы (Е=Ё=е=ё) заменены на символы по рандомно сгенериной таблице.
Суть задания - проанализировать зашифрованный текст и составить таблицу встречаемости символов (всего 32 используемых для кодирования символа, соответственно). Затем проанализировать какое-то русское произведение (или несколько), составить такую же таблицу частотности для русских букв, ну и сопоставить. И все вроде бы хорошо, вот только такая таблица для русских букв будет не 100% совпадать с таковой в исходном тексте. Поэтому приходится делать 4-5 свапов букв в этой таблице вручную. А в идеале программа должна расшифровывать текст без пользователя.
Для улучшения алгоритма советуют использовать словари частотности 1,2,3 буквенных слов (или частей слов) в русском языке. Но я вот нихуя не понимаю как её можно прицепить к этой программе. Поясните на пальцах, как эти словари использовать в данной программе?
1 приклейтед - таблицы
2 приклейтед - дешифровка, в которой я в качестве текста для анализа закинул сам зашифрованный текст
3 приклейтед - дешифровка, в которой в качестве текста для анализа 3 произведения этого автора Булгакова

Как использовать словари 1,2,3 буквенных слов для улучшения алгоритма?
Аноним 17/03/15 Втр 16:15:53 #2 №451404 
14265981538800.png
Вот так выглядит сам зашифрованный текст + словари.
Аноним 17/03/15 Втр 16:24:43 #3 №451409 
http://people.csail.mit.edu/hasinoff/pubs/hasinoff-quipster-2003.pdf
Аноним 17/03/15 Втр 17:45:03 #4 №451436 
Лол из соседней темы https://2ch.hk/pr/res/451432.html
Если я тебе исходник генератора чисел дам, зашифрованный с его же помощью, расшифруешь?
Аноним 17/03/15 Втр 17:57:49 #5 №451441 
>>451436 А хуй знает.
Аноним 17/03/15 Втр 18:43:58 #6 №451459 
>А в идеале программа должна расшифровывать текст без пользователя.
Можно список слов с буквой 'ё' составить на основе произведения или произведений, которые берем для составления частотной таблицы. Далее можнм искать похожие слова в зашифрованном тексте. Если будут пересечения, то задача решится в автоматическом режиме.
Аноним 17/03/15 Втр 18:46:25 #7 №451460 
>>451459
Извините, условие читал жопой.
Аноним 17/03/15 Втр 18:51:27 #8 №451463 
В /b/ анон посоветовал "возьми расшифрованный при помощи текущей частотной таблицы текст и проверь его на частоту вхождений в него из словаря сочетаний, выставляем оценку(возьми допустим Сумма(частота в словаре * частота в тексте)) поменяй соответствие алфавита и повтори оценку. соответствие с лучшей оценкой - ключ к шифру"
но я не очень понял.

Придется каждое слово из словаря (~170 двубуквенных,~700 трёхбуквенных,~2700 четырёхбуквенных) прогонять через расшифрованный текст и создавать новую таблицу?
Аноним 17/03/15 Втр 18:55:22 #9 №451465 
>Поясните на пальцах, как эти словари использовать в данной программе?
Берем текст, расшифрованный на основе частотных таблиц. Вытаскиваем из него список коротких слов. Теперь задача сделать свапы таким образом, чтобы все короткие слова попали в список коротких слов из частотной таблицы. Если исходный шифрованный текст большой, то можно и частоты подогнать. Минимизировать среднеквадратичное отклонение, например.
Аноним 17/03/15 Втр 19:03:24 #10 №451469 
>>451465
>Вытаскиваем из него список коротких слов.
Не выйдет.
Короткие слова - это любые 2,3,4 буквенные части слов, а не отдельные слова, ограниченные знаками. То есть в слове привет содержится 3 буквенное ПРИ (0.939251) и 2 буквенное ЕТ (ет 0.001174). Исходный текст - Записки юного врача, то есть да, большой.
Еще идеи есть?
Аноним 17/03/15 Втр 19:12:32 #11 №451473 
Средняя частотность действительно сильно разнится с частотностью в исходном тексте. Приходится примерно 7-10 свапов букв вручную делать.
Аноним 17/03/15 Втр 20:07:38 #12 №451493 
Бамп
Аноним 17/03/15 Втр 21:31:42 #13 №451538 
14266171025560.jpg
Аноним 17/03/15 Втр 22:01:12 #14 №451558 
>>451469
>Еще идеи есть?

Составляем словарь слов по произведениям или берем готовый.

Вводим оценку расшифрованного текста. Т.е. насколько слова в расшифрованном тексте совпадают со словами из настоящего словаря. Тут я пока затрудняюсь предложить что-то умнее суммы минимального количества отличных букв, по сравнению со словами такой же длины. Скажем, для "саитября" будет величина x = 2 от слова "сентября", если такое окажется в эталонном словаре. В качестве оценке суммируем величины для всех слов в расшифрованном тексте.

После этого начинается поиск в дереве решений. Переход к потомку — свап в текущей таблице. При поиске можно использовать различные эвристики, альфа-бета отсечения и прочее дерьмо.

В таком методе трехбуквенники не используются. Видимо, надо как-то их искать в тексте. Я не знаю как.

А вообще, сдается, мы сидим тута и какой-то велосипед изобретаем тута.
Аноним 17/03/15 Втр 22:06:05 #15 №451564 
>>451558 Весь день изобретаю, так ничего и не изобрел. Все методы какие-то слишком геморные, а задача изначально называлась простой. Да и вроде без всяких составных словарей должно получаться. По сути анализ этих словарей или их сопоставление с первым вариантом расшифрованного текста, должно как-то улучшать таблицу кодировки (частотная таблица для русских букв). Но что-то ничего путного не выходит.
Пробовал реализовать вычленение всех 2/3 буквенных конструкций из текста, но понял, что по памяти это совсем не выгодно.
Аноним 17/03/15 Втр 22:24:02 #16 №451570 
>Для улучшения алгоритма советуют использовать словари частотности 1,2,3 буквенных слов (или частей слов) в русском языке
Можно попробовать брать не все возможные сочетания, а только слова длиной 1..2 буквы, а также приставки и окончания. Потом сравнивать частоты.
Аноним 17/03/15 Втр 22:25:47 #17 №451572 
>>451570 Как их вычленять-то? Представь сколько их в каком-нибудь произведении русской классики.
Аноним 17/03/15 Втр 22:32:14 #18 №451574 
>>451558
Расстояние левенштейна
Аноним 17/03/15 Втр 22:43:24 #19 №451582 
Ну что, аноны, есть еще годные идеи?
Аноним 17/03/15 Втр 22:58:44 #20 №451592 
>>451572
>Как их вычленять-то?
Проходишь по тексту и вычленяешь. Всё делается в один проход. Для длинных слов придется брать несколько вариантов начала и конца (от 1..3 символов, тут можно поиграться с эвристиками). Доступ тупо к словарю — O(log N). Всё пучком. Можно свою структуру данных намутить для коротких слов: 32 буквы в 3 степени (максимальная длина коротких слов) дают всего лишь 32768 комбинаций.
Аноним 17/03/15 Втр 23:01:17 #21 №451595 
>>451592 Слишком плохо по памяти выходит. Без искусственных словарей бы.
Аноним 17/03/15 Втр 23:01:21 #22 №451596 
>>451592
35937 комбинаций с учетом, что слова могут иметь разную длину и понадобится пустой символ — ноль. В такой массив можно записывать частоты. А можно просто в словарь для начала, комбинаций не так много.
Аноним 17/03/15 Втр 23:04:42 #23 №451599 
>>451596 Ну допустим я реализую вычленение всех 3 буквенных комбинаций. А сделать это будет нихуя не просто, правила для разделения слов не придумать, слово "привет" придется делить на "При Рив Иве Вет"
Получу частотный словарь этих комбинаций для криво-расшифрованного текста. Дальше-то что?
Аноним 17/03/15 Втр 23:06:01 #24 №451600 
Попробуй тогда без приставок и окончаний. Только короткие слова, только хардкор. Та же самая задачка по сопостовлению букв на основе частот. Только частоты для коротких слов брать.
Аноним 17/03/15 Втр 23:09:25 #25 №451602 
>>451600 Я не смогу на ходу заменять в тексте целиком слова ведь. Считывание и запись посимвольные. Ну или я что-то делаю не так.
Аноним 17/03/15 Втр 23:10:37 #26 №451605 
>>451599
У тебя какой-то нефундаментальный подход.

Во-первых, я имел в виду, что надо брать приставки и окончания. Поэтому слово "привет" даст сочетания [п, пр, при, вет, ет]. Я бы такое вычленение сделал. Короткие слова, менее 5 букв, не разделять.

Во-вторых, надо вычленять ровно то, что вычленено в таблице на пикче. Если это буквы, идущие в словах подряд, то вычленять буквы, идущие в словах подряд. Если приставки, то приставки. Если только короткие слова, то только их. Тогда можно говорить о сравнении частот.
Аноним 17/03/15 Втр 23:11:14 #27 №451606 
>>451602
Расскажи о себе.
Аноним 17/03/15 Втр 23:15:25 #28 №451610 
>>451602
Зачем на ходу заменять?

1) Считал слово -> зафиксировал данные (в частотах счетчики поинкрементил) -> считал слово -> ...

2) Построил таблицу на основе соответствий.

3) Открыл файл заново.

4) Считал букву -> вывел буквы через таблицу -> считал букву -> ...

Это для успешного алгоритма, который умеет за один проход расшифровывать.

Если это поиск решения с какой-то оценкой, то функция работает так:
Считали слово -> заменили по текущей таблице -> поинкрементили оценку для решения -> считали слово -> ...
Аноним 17/03/15 Втр 23:23:06 #29 №451614 
>>451605 Может глобально мыслить уже не могу, целый день над этим думаю.
Начинаю считывать фейл - считал посимвольно целое слово (последовательность русских букв, ограниченную какими-то знаками), далее расчленяю это слово на 2/3/4 буквенные части и делаю новую таблиц частотности?
Аноним 17/03/15 Втр 23:23:55 #30 №451615 
>>451610 Я же не могу заменять слова в файле по одному.
comments powered by Disqus