Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таблица частотных распределений, определение кодировки 
:(
    Опции темы
Bulat
Дата 16.7.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Немного погуглил, но что-то особое пока не нашел. Хотелось бы почитать про то, как с помощью таблицы частотных распределений букв русского алфавита можно определить кодировку. Конечно, если такое возможно smile

Может ссылка на какой полезный и раскрывающий данную тему ресурс будет??

А если еще и  smile  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
W4FhLF
Дата 16.7.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



Распределение букв русского алфавита в любом тексте стремиться к нормальному. Кодировка задаёт соответствие таблицы кодов символам для отображения. Как это может быть связано? Только если какое-то эмпирическое наблюдение и то это кажется странным. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
maxim1000
Дата 16.7.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(W4FhLF @  16.7.2008,  14:30 Найти цитируемый пост)
Распределение букв русского алфавита в любом тексте стремиться к нормальному

это как?
и почему?


--------------------
qqq
PM WWW   Вверх
aleksh
Дата 16.7.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13



а что подразумевается под словом "кодировка"?
случаем не шифрование смещением/заменой? потому что если да, то лучше использовать таблицу биномов (или как там они называются)
PM MAIL   Вверх
W4FhLF
Дата 16.7.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



maxim1000, до того момента, как ты меня спросил, я считал своё утверждение истинным smile Я не прав?


Bulat, ты неверно сформулировал вопрос. За основу берётся не частотное распределени букв, а частотное распределение символьных кодов. MS уже всё сделала за тебя smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Bulat
Дата 16.7.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Под кодировкой имеется ввиду - utf8, koi8-r, win1251  и т.п.

W4FhLF, Это не я сформулировал, это было сформулировано до меня. Но я так же как и был застан врасплох данной формулировкой smile

Вот отрывки 
Код

Требуется написать консольный скрипт на perl, 
который определяет кодировку заданного файла...

...
Содержимое 
входного файла может быть в одной из кодировок: 
utf-8, cp1251, koi8-r.

...
Для определения кодировки можно использовать таблицу 
частотных распределений букв русского алфавита 
(таблица не учитывает различие между Е и Ё и регистра 
букв)


Цитата(W4FhLF @  16.7.2008,  14:30 Найти цитируемый пост)
Только если какое-то эмпирическое наблюдение и то это кажется странным.

А вот это очень верное наблюдение, ИМХО ;)



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
dereyly
Дата 16.7.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 1
Всего: 4



Цитата(Bulat @ 16.7.2008,  17:12)
Для определения кодировки можно использовать таблицу 
частотных распределений букв русского алфавита 
(таблица не учитывает различие между Е и Ё и регистра 
букв)

Прикольный способ.... респект тому кто предложил
воть линка http://www.aronetis.com/freq.html
PM MAIL   Вверх
Bulat
Дата 17.7.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



dereyly, сама таблица есть, вместе с текстом задачи. Хотя скока я не находил в сети таблиц, почему-то значения той таблицы что в задании отличаются. smile

Мне бы поточнее разобраться в алгоритме. Потому как подсчитать сколько раз определенная буква встречается в тексте, в независимости от кодировки - это еще более простая часть. А вот дальше я немного в затруднении, ибо кажется мне, что лишь простым соотношением <количество определенной буквы>/<общее количество символов> дело не ограничивается smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
W4FhLF
Дата 17.7.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



Цитата(Bulat @  17.7.2008,  08:29 Найти цитируемый пост)
Мне бы поточнее разобраться в алгоритме. Потому как подсчитать сколько раз определенная буква встречается в тексте, в независимости от кодировки - это еще более простая часть.


А что ту непонятного? Забудь про буквы, пока ты не знаешь, что за кодировка, ты даже понятия не имеешь какие коды каким символам(буквам) соответствуют. Тебе и знать этого не надо. 

Ты читал ссылку, которую я приводил?

Цитата(http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/VBA/Decoder/254.mspx)

Тут хорошо видно, что строчные буквы попадают в разные числовые диапазоны для разных кодовых таблиц. Любопытно также отметить, что частота появления букв первой половины русского алфавита (от «а» до «п») в два раза выше, чем частота букв от «р» до «я». Соответственно, если принять за условие, что процент строчных русских букв среди кодов 128-255 превышает заданную величину, например, Lpercent = 0,70, то критерий определения кодовой таблицы будет выглядеть таким образом:

Windows    частота (&hE0-&hFF) > Lpercent
KOI8-R    частота (&hC0-&hDF) > Lpercent
DOS    частота (&hA0-&hAF + &hE0-&EF) > Lpercent
ISO    частота (&hD0-&hEF) > Lpercent


Для каждой кодировки русские буквы занимают разные диапазоны кодов. Выше приведены эти диапазоны для 4х кодировок. Ну вот возьми подсчитай частоту встречи символов в своём тексте с кодом 128-255, потом проверь в какой из вышеперечисленных диапазонов попадает наибольшее число символов, ну и задача собсно решена. 




--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
aleksh
Дата 17.7.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13



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

p.s. долго писал...

Это сообщение отредактировал(а) aleksh - 17.7.2008, 09:45
PM MAIL   Вверх
Bulat
Дата 17.7.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(W4FhLF @  17.7.2008,  09:32 Найти цитируемый пост)
Для каждой кодировки русские буквы занимают разные диапазоны кодов. Выше приведены эти диапазоны для 4х кодировок. Ну вот возьми подсчитай частоту встречи символов в своём тексте с кодом 128-255, потом проверь в какой из вышеперечисленных диапазонов попадает наибольшее число символов, ну и задача собсно решена. 


А как быть с utf8 ?? smile

Добавлено через 1 минуту и 8 секунд
Конечно можно попробовать соориентироваться на первые пару символов, которые есть только в тексте с кодировкой utf8, но не думаю. что этого будет достаточно smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
W4FhLF
Дата 17.7.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



Цитата(Bulat @  17.7.2008,  09:54 Найти цитируемый пост)
А как быть с utf8 ??


Русские символы в UTF-8 кодируются двумя байтами. Допустим диапазон прописных русских: 0xD0B0 - 0xD18F(на самом деле там два поддиапазона для первой и второй половин алфавита). Этого уже может быть достаточно для определения кодировки.

Цитата(Bulat @  17.7.2008,  09:54 Найти цитируемый пост)
Конечно можно попробовать соориентироваться на первые пару символов, которые есть только в тексте с кодировкой utf8, но не думаю. что этого будет достаточно 


Файлы в UTF-8 обычно начинаются с 3х постоянных байт: EF BB BF

Хотя я не знаю, является ли это гарантией, но как один из признаков точно. 




--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Bulat
Дата 17.7.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(W4FhLF @  17.7.2008,  10:39 Найти цитируемый пост)
Хотя я не знаю, является ли это гарантией, но как один из признаков точно. 

В одно время постоянно приходилось разбираться с кодировками. Пока что всегда в utf присутствовали эти три байта. Тут есть лишь другое "но", нет гарантий, что в тексте лишь кириллица и пробелы, т.е. возможна латиница и вообще иные символы. Не исключено что текст в той же win может начинаться с символов, которым соответствуют как раз эти три байта smile

Добавлено через 3 минуты и 12 секунд
Цитата(aleksh @  17.7.2008,  09:41 Найти цитируемый пост)
а по поводу алгоритма: вроде простого отношения достаточно

Скорее всего нет. Т.е. для очень большого текста, вполне, может быть, если проверить не на одну а на две-три буквы.


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
W4FhLF
Дата 17.7.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



Bulat, ты ведь используешь статистические показатели, которые накапливаются. В общем случае, чем больше текст, тем ближе твой вывод о кодировке к истине. Ясно, что тут существует некоторый порог, ниже которого принятое решение о кодировке не является значимым. Ну, допустим, если в тексте 10 символов, 7 из которых не являются символами русского алфавита(в данной, ещё неизвестной, кодировке), то тут накопленой статистики просто может не хватить. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
aleksh
Дата 17.7.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: нет
Всего: 13



может имеет смысл привязываться не к статистике букв, а к поиску ожидаемых слов, или о предостовляемом тексте ничего заранее не известно?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1036 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.