Многобайтныйе кодировки. Однобайтные кодировки
Многобайтныйе кодировки Основываясь на МПБ, UniversalDetector проверяет содержит ли текст символы со старшим байтом. Если так, то он создает набор «исследователей» для определения многобайтных кодировок, однобайтных кодировок, и в качестве последнего средства windows-1252. Исследователь для многобайтныйх кодировок, MBCSGroupProber(определенный в mbcsgroupprober. py), на самом деле просто консоль которая управляет группой других исследователей, по одному на каждую многобайтную кодировку: Big5, GB2312, EUC-TW, EUC-KR, EUC-JP, SHIFT_JIS, и UTF-8. MBCSGroupProber отдает текст каждому из этих кодировкозависимых исследователей и проверяет результат. Если исследователь сообщает что нашел недопустимую последовательность, он исключается из дальнейшей обработки(так что любые последующие вызовы UniversalDetector. feed() пропустят этого исследователя). Если исследователь сообщает что он достаточно уверен в том что определил кодировку, MBCSGroupProber сообщает о положительном результате в UniversalDetector, который передает результат вызвавшему его процессу. Большинство исследователей многобайтных кодировок наследованы от MultiByteCharSetProber(определенном в mbcharsetprober. py) и просто включают в себя подходящий конечный автомат и анализатор распределения а остальную работу выполняет MultiByteCharSetProber. MultiByteCharSetProber пропускает текст через зависимый от кодировки конечный автомат побайтно, чтобы найти последовательность байт которая бы указала на положительный или отрицательный результат. В то же время, MultiByteCharSetProber пропускает текст через зависимый от кодировки анализатор распределения. Анализатор распределения(каждый определен в chardistrubution. py) использует модель в которой указано в каком языке какие символы встречаются чаще. Как только MultiByteCharSetProber отдал достаточно текста для анализа, вычисляется рейтинг схожести основанный на числе часто используемых символов, общем количестве символов, и коэффициенте распределения специфичном для языка. Если уверенность достаточно высока, MultiByteCharSetProber возвращает результат в MBCSGroupProber, который возвращает результат в UniversalDetector, а он в свою очередь вызвавшему его процессу.
Тяжелее всего разобраться с японским. Односимвольного анализатора распределения не всегда достаточно чтобы различить EUC-JP и SHIFT_JIS, поэтому SJISProber(определенный в sjisprober. py) также использует двухсимвольный анализатор распределения. SJISContextAnalysis и EUCJPContextAnalysis (оба определенные в jpcntx. py и оба наследованные от класса JapaneseContextAnalysis) проверяют частоту повторения символов Хироганы в тексте. Как только достаточно текста было обработано, он возвращает уровень уверенности в SJISProber, который проверяет оба анализатора и возвращает результат на уровень выше в MBCSGroupProber. Однобайтные кодировки Серьезно, где мой пони юникода? Исследователь для однобайтных кодировок, SBCSGroupProber(определенный в sbcsgroupprober. py), так же просто консоль которая управляет группой исследователей, по одному на каждую комбинацию однобайтной кодировки и языка: windows-1251, KOI8-R, ISO-8859-5, MacCyrillic, IBM855, и IBM866 (Русский); ISO-8859-7 и windows-1253 (Греческий); ISO-8859-5 и windows-1251 (Болгарский); ISO-8859-2 и windows-1250 (Венгерский); TIS-620 (Тайский); windows-1255 и ISO-8859-8 (Иврит). SBCSGroupProber отдает текст каждому такому исследователю специфичному для языка и кодировки и проверяет результат. Все эти исследователи реализованы как один класс, SingleByteCharSetProber (определенный в sbcharsetprober. py), который принимает модель языка в качестве аргумента. Модель языка определяет как часто встречаются различные двухсимвольные последовательности в обычном тексте. SingleByteCharSetProber обрабатывает текст и отмечает наиболее часто используемые двухсимвольные последовательности. Как только было обработано достаточно текста, он вычисляет уровень схожести основанный на количестве часто встречающихся последовательностей, общем количестве символов, и специфичным для языка коэффициентом распределения.
Иврит обрабатывается по особому. Если при помощи анализа двухсимвольного распределения выясняется что текст может быть на Иврите, HebrewProber(определенный в hebrewprober. py) пробует различить Визуальный Иврит(где каждая строка исходного текста хранится «наоборот», и потом отображается так же чтобы она могла быть прочтена с права на лево) и Логический Иврит(где текст сохранен в порядке чтения и после этого отображается в клиенте справа на лево). Поскольку некоторые символы кодируются различно в зависимости от положения в слове, мы можем сделать обоснованное предположение о направлении исходного текста, и определить нужную кодировку(windows-1255 для Логического Иврита или ISO-8859-8 для Визуального Иврита)
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|