|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Ivan Storogev 2:5020/400 10 Jun 2002 09:04:14 To : dmitry chernokozov Subject : Re: кодировка -------------------------------------------------------------------------------- Привет dmitry, Sunday, June 9, 2002, 11:13:14 PM, вы писали: dc> Как можно определить кодировку текста ? Если есть чистый текст (для простоты dc> строка слов) из русских символов, которые могут быть в 866/1251/koi8/iso. Строка слов как раз усложняет, а не упрощает задачу. Куда проще, если не строка, а килобайт несколько. dc> Интересуют методы подобного определения. Hасколько я понимаю можно банально dc> перебирать слова по словарю (но это долго), а можно воспользоваться dc> лингвистикой (в ней я не силен). Может есть у кого примеры (желательно на dc> c)? Проще всего воспользовать статистикой встречаемости в реальных текстах букв. Для набора статистики воспользоваться любой подборкой осмысленных текстов. Для коротких текстов этот метод будет давать ошибки. Для тестов из 10-15 букв (2-4 слова) вовсе работать не будет. По скорости самый быстрый. Более эффективный метод -- это статистика не одиночных букв, а их коротких (2-4) последовательностей (диграфы, триграфы), при этом нужно учитывать как букву и начало/конец слова. Тут важно, что многие сочетания букв в русском (и любом другом) языке не встречаются, поэтому можно принимать решение методом исключения. Это дает возможность засечь многократно перекодированный и испорченный текст. Для двойных неправильных перекодировок (KOI8, перекодированный как 1251 и т.п.) нужно заранее составить статистические таблицы. Hаконец, можно применить вариант словарного метода, но не для слов целиком, а только для их начал. То есть сначала просматриваем первые 3 буквы, если достоверного решения не принято -- 4 буквы, и т.д. Тут нужно учесть приставки. Можно, например, просматривать по словарю не только начала слов, а с отступом на 1..4 буквы. Это промежуточный, между n-графами и словарем, метод. Кстати, словарный метод вовсе не обязательно медленный. Присмотритесь к программам проверки орфографии, работающим словарным методом (ispell, aspell). Программы GNU, с исходниками. Там же можно найти и русские словари в компактной форме. Указанные программы для поиска используют хеширование. Хеш (hash) составляется заранее. Для экспериментов и набора статистик советую воспользоваться Perl'ом или Python'ом (или чем-то ещё, в то же роде). Это резко увеличит скорость разработки. Все указанные методы, работают только на осмысленных текстах. Длина текста: хотя бы 1 слово для словарных и десятки букв для статистических методов. -- Всех благ, Иван. Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5 * Origin: KKK (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/15069d365d8a.html, оценка из 5, голосов 10
|