![]() |
|
![]() ![]() ![]() |
|
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
В том-то и дело. Предполагается лишь то, что в тексте есть кириллица, а что там может быть еще, кроме кириллицы, и в каком количестве? Кстати, вот тут мне кажется как раз уместно смотреть по таблице частотных вхождений. Ведь исключать вариант, что в файле есть пару абзацев кириллицы, а все остальное кракозябры(причем с теми байтами, которые как раз могут выдать вероятность совсем иной кодировки, чем есть на самом деле) исключать нельзя. Или я в чем-то ошибаюсь?? -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 2 Всего: 17 |
ну это было бы слишком... к такому привязываться нельзя Добавлено через 2 минуты и 24 секунды В случае такого противоречия надо на мой взгляд отображать в кодировке начала документа, ведь когда человек откроет его, он увидит именно начало -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 5 Всего: 121 |
Если символы не подходят, а слова слишком круто - можно брать слоги. Хотя прежде, чем усложнять задачу, необходимо проверить эффективность самого простого решения, может его вполне достаточно будет.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
нормальное распределение определено на действительных числах (если рассматривать одномерный вариант), так что перед тем, как вообще применить понятие нормального распределения к буквам, их нужно перенумеровать и здесь возникает первая проблема: какой порядок выбрать ведь выбирая различные порядки можно сделать и один всплеск в середине, и два по краям и выбрав какой-то один порядок, нужно представлять, чем он лучше других вторая проблема в том, что даже сопоставив каждому символу номер, непонятно, что делать с остальными числами на действительной оси - к каким символам их отнести? это относилось к вопросу "как?" третья проблема - "почему?" далеко не в любом случае распределение стремится к нормальному в каких-то случаях более естественным оказывается экспоненциальное, в других равномерное большинство случаев, когда распределение стремится к нормальному, основываются на том, что у нас есть сумма большого количества случайных величин но как бы мы не нумеровали символы, нас не интересует распределение суммы их индексов, так что здесь нет оснований применять всякие законы больших чисел и т.п. Это сообщение отредактировал(а) maxim1000 - 17.7.2008, 12:53 -------------------- qqq |
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
если сказали о возможности использования таблицы частотных распределений букв значит файл большой, а раз может быть только три кодовых таблицы (если правильно понял) -- значит кракозябры мало
может так: находим пару самых встречаемых символов, проверяем не коды ли utf это, например первых шести букв таблицы, если да -- кодировка определена, если нет -- находим еще пару-тройку самых встречаемых из файла, и смотрим, в диапазон каких оставшихся кодировок входят найденные нами пять-шесть символов Добавлено через 7 минут и 23 секунды еще один вариант: сортируем символы в файле по убыванию, потом переводим их в кириллицу использую, по очереди, кодовые таблицы, а потом сравниваем с таблицой частотных вхождений (нам же ее дадут, или самим составлять?), получится три сравнения, выбираем тот, где разброс букв меньше (позиции в таблицах более близкие) p.s. на перле писать не умею, поэтому насколько предложенные варианты реализуемые судить не могу |
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
под крякозяброй имелось ввиду, не только "крякозябра" а весь набор символов не относящийся к буквам(или цифрам) ![]() -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
ну если так, то все на много проще: самый встречаемый символ -- это пробел, не помню на сколько но в разы превышает буквы. отсель следует: находим самый встречаемый символ (это будет пробел) и смотрим к какой из трех кодировк он относится
а касательно кракозябры: если это не текст какой-нибудь лекции/доклада/статьи по физике/математики/химии, то закодированых цифр и мат-символов (плюсы, дроби и т.д.) там будет мало, на статистику не сильно повлияют назрел вопрос: какое требование к универсальности алгоритма? |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 5 Всего: 121 |
У пробела в ASCII один и тот же код независимо от кодировки. Bulat, ещё раз, ты высасываешь проблему из пальца. Возьми реализуй и протестируй. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Как только на работе появится немного свободного времени, продолжу ;)
Лучше сначала обговорить все возможные варианты, просмотреть и подумать, составить хоть какой-нить план работы, а не кидаться сразу к написанию кода, что частенько приводит к переписыванию оного несколько раз ![]() -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 5 Всего: 121 |
maxim1000, спасибо за пояснения, действительно что-то перепутал я, но вот не пойму откуда у меня засела мысль с нормальным распределением для русского текста.
![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Четкого требования нет. Я выкладывал отрывки из формулировки задачи. Опять же, мы не знаем, что у нас за текст. Каких-то четких условий нет. Наткнулся вот на задачу - появилось желание попробовать реализовать ![]() Делаю немного по иному. Просто первожу символы в 16-е значения, и для каждой кодировки подсчитываю количество вхождений только тех, что соотв. алфавиту данной кодировки. Таким образом у меня есть данные сразу для трех кодировок.(Попути уже вычисляю "свои частоты"). Теоретичски, уже сейчас достаточно(т.е. если предположить, что в текст, скажем так литературный), можно сложить для каждой кодировки соотношения, и та что ближе к 1, и будет верной кодировкой. Но все же, я думаю надо еще прописать чего-нить для разброса букв. Т.е. сравнить мои частоты с табличными. ![]() -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |