Обучалка

Цель этой обучалки - доступным образом объяснить, как поставить данный модуль, настроить поддержку русского языка в программе и показать, каким образом надо работать с модулем используя объектно-ориентировочное программирование. Вполне возможно, что человек, который будет пользоваться этим модулем, не умеет этого делать, и я не хотел бы, чтобы это стало препятствием или каким-либо затруднением для него в работе с данным модулем. Тем более, что одной из основных идей при написании этого модуля было желание сделать его как можно более простым в использовании.

Если Вы все это умеете делать, то Вам следует обратиться непосредственно к документации на модуль, поскольку здесь Вы ничего нового не узнаете.


Установка модуля

Стандартная, UNIX

После скачивания и разархивации введите команды

perl Makefile.PL

make

make test

make install

В том случае, если Вы хотите поставить модуль в свою директорию, например в /home/my/perl/directory, то тогда строчку perl Makefile.PL измените на

perl Makefile.PL LIB=/home/my/perl/directory

А затем, в своей программе, перед

use Lingua::RU::Antimat;

вставьте

use lib '/home/my/perl/directory';

WINDOWS, ActiveStatePerl

Скачайте ppm архив, разархивируйте его, введите команду

ppm install Lingua-RU-Antimat.ppd

Ручная, для Windows и UNIX

Скачайте архив. Разархивируйте его в какую-нибудь директорию. Для UNIX это команды

gunzip archive.tar.gz

tar xvf archive.tar

В Windows'e для разархивации можно воспользоваться архиватором WinZip ( http://www.winzip.com ).

Затем, в каталоге, в который Вы хотите поставить модуль (например, D:\Perl\MY\Modules), создайте каталог Lingua. В этом каталоге создайте каталог RU. Скопируйте из директории, в которой находится разархивированный архив, в каталог D:\Perl\MY\Modules\Lingua\RU файл Antimat.pm .

Затем в программе перед

use Lingua::RU::Antimat;

вставьте

use lib 'D:\Perl\MY\Modules';

Данный модуль требует наличия модуля FileHandle. Модуль FileHandle довольно распространенный и редко когда отсутствует на сервере. Но если его нет, необходимо будет его поставить. Если с этим с этим возникнут проблемы, дайте мне знать. Я поставлю ссылку на этот модуль.


Использование в программе

a) Сервер работает под UNIX'ом

Настройка русского языка в программе

Прежде всего, нужно установить поддержку русского языка в программе.

1. Определите, в какой кодировке вы будете передавать текст c матом методам модуля. Обычно это кодировка совпадает с той кодировкой, в которой у Вас хранится документы на сервере.

2. Спросите у администратора сервера, как называется локаль для этой кодировки. Если ее нет, попросите ее поставить, это у него займет 2-3 минуты. В результате Вы получите название локали в виде ru_RU.CP1251 или ru_RU.KOI8-R (также возможны другие варианты названий, например ru_RU).

Также может помочь чтение документации о локале perldoc perllocale и man locale.

3. Итак, название локали известно, теперь нужно подключить эту локаль в программе.

Вставляем перед

use Lingua::RU::Antimat;

строчку

use POSIX qw(locale_h);

а перед тем, как начнете использовать методы модуля, вставьте

use locale;

setlocale(LC_CTYPE,'ru_RU.CP1251');

,где вместо ru_RU.CP1251 должно быть название локали, которую Вы получили от Администратора.

Каким образом можно узнать, что локаль настроена неправильно? Матерные слова написанные маленькими буквами, будут вырезаться, а написанные заглавными буквами - нет. В общем-то, настройка локали нужна именно для того, чтобы выполнить поиск и замену слов независимо от того, в каком регистре они написаны. Если же и матерные слова написанные маленькими буквами не заменяются, то это означает, что:

a) неправильно определена кодировка для текста с матом;

б) кодировка неправильно указана в методе new() (см. ниже).

Мне нужно удалить мат, а затем проверить правильность e-mail'a. До того, как поставил локаль, все отлично работало. Теперь мат удаляется, но при проверке e-mail'а разрешены русские буквы.

Если дальше в скрипте русская локаль не нужна, вставте после того, как выполните последний метод модуля, строку

no locale;

После этого поддержка русского языка будет отключена.


Использование методов модуля

После того, как будет настроена локаль, можно переходить к использованию методов модуля.

Пусть в переменной $dirty_text хранится текст, в котором нужно заменить все матерные слова на слово 'бип'.

Если у Вас этот текст находится в кодировке win-1251, то тогда все, что Вам надо написать это:

my $mat= Lingua::RU::Antimat->new;

$clean_text=$mat->remove_slang($dirty_text);

В переменной $clean_text находится результат. Аналогичным образом Вы будете вызывать и другие методы для работы с матом. Например, для того, чтобы сделать замену не на слово 'бип', а на слово 'Ой!' следует вызвать метод set_bip

$mat->set_bip('Ой!');

Все вместе:

my $mat= Lingua::RU::Antimat->new;

$mat->set_bip('Ой!');

$clean_text=$mat->remove_slang($dirty_text);

Теперь, если у Вас текст с матом находится в кодировке KOI8-R. В этом случае вместо строчки

my $mat= Lingua::RU::Antimat->new;

надо написать

my $mat= Lingua::RU::Antimat->new('koi8');

Все остальное останется без изменений.


Собираем все это вместе

Так это все выглядит вместе для текста в кодировке win-1251:

use POSIX qw(locale_h);

use Lingua::RU::Antimat;

...

...

use locale;

setlocale(LC_CTYPE,'ru_RU.CP1251');

my $dirty_text='Здесь много матерных выражений';

my $mat= Lingua::RU::Antimat->new;

$mat->set_bip('Ой!');

my $clean_text=$mat->remove_slang($dirty_text);

no locale;

На этом цели обучалки достигнуты. Вы должны теперь суметь поставить этот модуль, настроить поддержку русского языка в Вашей программе и не смущаться при виде объектов. Остальные методы модуля описаны в документации.


б) Сервер работает под WINDOWS

Такого понятия как локаль под Windows нет, так что и проблем с наcтройкой локали у Вас тоже не будет.

Использование методов модуля

Здесь можно сразу переходить к использованию модуля.

Пусть в переменной $dirty_text хранится текст, в котором нужно заменить все матерные слова на слово 'бип'.

Все, что Вам надо написать, это

my $mat= Lingua::RU::Antimat->new;

$clean_text=$mat->remove_slang($dirty_text);

В переменной $clean_text находится результат. Аналогичным образом вы будете вызывать и другие методы для работы с матом. Например, для того, чтобы сделать замену не на слово 'бип', а на слово 'Ой!' следует вызвать метод set_bip

$mat->set_bip('Ой!');

Все вместе:

my $mat= Lingua::RU::Antimat->new;

$mat->set_bip('Ой!');

$clean_text=$mat->remove_slang($dirty_text);


Собираем все это вместе

Для Windows скрипт будет выглядеть следующим образом:

use Lingua::RU::Antimat;

...

...

my $dirty_text='Здесь много матерных выражений';

my $mat= Lingua::RU::Antimat->new;

$mat->set_bip('Ой!');

my $clean_text=$mat->remove_slang($dirty_text);

На этом цели обучалки достигнуты. Вы должны теперь суметь поставить этот модуль и не смущаться при виде объектов. Остальные методы модуля описаны в документации.