Forum Webscript.Ru

Программирование => Perl => Тема начата: Skif от 03 Мая 2005, 03:39:55

Название: Модуль Lingua::DetectCharset - проблемы
Отправлено: Skif от 03 Мая 2005, 03:39:55
вот надыбал понравившийся мне модуль, но получил маленький облом.
Модуль Lingua::DetectCharset;
А вот проблемы(покажу на простеньком скрипте):

Цитировать

.....
use Lingua::DetectCharset;
    use LWP::Simple;

$str=get("http://server.com.ua");

my $charset = Lingua::DetectCharset::Detect ($str) ;


По идее проблем быть не должно. Но идея великая вещь:

Цитировать

Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 85.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 85.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 39.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 40.
Use of uninitialized value in division (/) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 41.



Это малая часть того, что мне выплевываетсся в консоль при запуске скрипта. :(
Ставил модуль при помощи

perl -CPAN -e \'install Lingua::DetectCharset\'

Сам модуль как бы поставился. То есть ошибок не было. А вот эффект - нулевой. Может я не правильно читаю маны и хелпы? Пните, пожалуйста
P.S.: чуть не забыл - ось FreeBSD, может это актуально
Название: Модуль Lingua::DetectCharset - проблемы
Отправлено: Skif от 03 Мая 2005, 15:22:22
А может есть альтернатива данному модулю? Вот ковыряюсь пока. Единственная полумера - отпарсить кодировку в заголовках html страницы. Но она мне не сильно нраиться- много левого всего писать. Да и потом, мне необходимо перекодировать все в нужную мне koi8r
Название: Модуль Lingua::DetectCharset - проблемы
Отправлено: cr4ck3r от 03 Мая 2005, 17:09:33
Да просто программеры переборщили с изяществом и лаконичностью кода. Бага тут:


my ($Mark, $i);
        for (@Data) {
                s/[\\n\\r]//go;
                $_ = Convert::Cyrillic::toLower ($_, $Code);
                for (split (/[\\.\\,\\-\\s\\:\\;\\?\\!\\\'\\"\\(\\)\\d<>]+/o)) {
                        for $i (0..length ()-$PairSize) {
                                $Mark += ${$Table} {substr ($_, $i, $PairSize)};
                        }
                }
        }

        $Mark;


Это файл /usr/local/lib/perl5/site_perl/5.8.2/Lingua/DetectCharset.pm
со строки 85. Как его изменить чтоб все работало нормально я так и не догнал. Суть здесь в замене содержимого по Таблице, при этом замена идет букв по парам, типа "ЧА" - заменяется на 2 и т.п. Таблица соответствий содержится в ссылке на хэш $Table, здесь как видите происходит какое-то убогое разыменовывание ( ${$Table} {substr ($_, $i, $PairSize)}) логичней было бы так:
 $Table->{substr ($_, $i, $PairSize)}. Но это не решает проблемы.
Короче - тут надо сообща подумать.
Название: Модуль Lingua::DetectCharset - проблемы
Отправлено: Skif от 04 Мая 2005, 01:46:40
:)
Я до этого в принципе сам додумался - ничего другого не оставалось, как разгребать на скорую код. Но в лоб тоже не удалось решить. Решил, что руки кривые. Но так как времени ковыряться особо не было - горит проект, приходиться прыгать...
В общем сейчсас просто пытаюсь по своим таблицам перекодировать, а кодировку выхватываю у сервера. Вот только иногда абракадабра получается, когда не верно сформированы заголовки. Точнее их полное отсутствие на html страничке и сервер выдает свою кодировку по дефаулту, а содержимое в совершенно другой... :( (koi8r - cp1251 - а такое почти повсеместно).