Re: кодировка
- From
- Ivan Storogev ()
- To
- dmitry chernokozov
- Date
- 2002-06-10T09:04:14Z
- Area
- RU.ALGORITHMS
From: Ivan Storogev <rezeda@dol.ru>
Привет dmitry,
Sunday, June 9, 2002, 11:13:14 PM, вы писали:
dc> Как можно определить кодировку текста ? Если есть чистый текст (для простоты
dc> строка слов) из русских символов, которые могут быть в 866/1251/koi8/iso.
Строка слов как раз усложняет, а не упрощает задачу. Куда проще, если не
строка, а килобайт несколько.
dc> Интересуют методы подобного определения. Насколько я понимаю можно банально
dc> перебирать слова по словарю (но это долго), а можно воспользоваться
dc> лингвистикой (в ней я не силен). Может есть у кого примеры (желательно на c)?
Проще всего воспользовать статистикой встречаемости в реальных текстах букв.
Для набора статистики воспользоваться любой подборкой осмысленных текстов.
Для коротких текстов этот метод будет давать ошибки. Для тестов из 10-15 букв
(2-4 слова) вовсе работать не будет. По скорости самый быстрый.
Более эффективный метод -- это статистика не одиночных букв, а их
коротких (2-4) последовательностей (диграфы, триграфы), при этом нужно учитывать
как букву и начало/конец слова.
Тут важно, что многие сочетания букв в русском (и любом другом) языке не
встречаются, поэтому можно принимать решение методом исключения. Это дает
возможность засечь многократно перекодированный и испорченный текст.
Для двойных неправильных перекодировок (KOI8, перекодированный как 1251 и
т.п.) нужно заранее составить статистические таблицы.
Наконец, можно применить вариант словарного метода, но не для слов целиком,
а только для их начал. То есть сначала просматриваем первые 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)