Цель этой обучалки - доступным образом объяснить, как поставить данный модуль, настроить поддержку русского языка в программе и показать, каким образом надо работать с модулем используя объектно-ориентировочное программирование. Вполне возможно, что человек, который будет пользоваться этим модулем, не умеет этого делать, и я не хотел бы, чтобы это стало препятствием или каким-либо затруднением для него в работе с данным модулем. Тем более, что одной из основных идей при написании этого модуля было желание сделать его как можно более простым в использовании.
Если Вы все это умеете делать, то Вам следует обратиться непосредственно к документации на модуль, поскольку здесь Вы ничего нового не узнаете.
После скачивания и разархивации введите команды
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';
Скачайте ppm архив, разархивируйте его, введите команду
ppm install Lingua-RU-Antimat.ppd
Скачайте архив. Разархивируйте его в какую-нибудь директорию. Для 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 довольно распространенный и редко когда отсутствует на сервере. Но если его нет, необходимо будет его поставить. Если с этим с этим возникнут проблемы, дайте мне знать. Я поставлю ссылку на этот модуль.
Прежде всего, нужно установить поддержку русского языка в программе.
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 нет, так что и проблем с на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);
На этом цели обучалки достигнуты. Вы должны теперь суметь поставить этот модуль и не смущаться при виде объектов. Остальные методы модуля описаны в документации.