Lingua::RU::Antimat - Модуль на языке Perl для замены, обнаружения или удаления мата из чатов, гостевых книг, форумов и т. д.
use POSIX qw(locale_h);
use Lingua::RU::Antimat;
use locale;
setlocale(LC_CTYPE,'ru_RU.CP1251');
$dirty_text='text with slang';
my $mat= Lingua::RU::Antimat->new;
$mat->load_dict('/home/www/badwords');
$mat->set_bip('Ой!');
$clean_text=$mat->remove_slang($dirty_text);
Этот модуль предназначен для замены, обнаружения или удаления мата из строки. Этой строкой могут быть сообщения в гостевой книге, чате или форуме. Модуль позволяет заменять мат и в тех случаях, когда русский мат написан английскими буквами или между буквами матерного выражения поставлены символы-разделители (любые символы за исключением букв или цифр. Например, пробелы, символы подчеркивания).
Я не ставил целью сделать замену всех возможных разновидностей матерных слов. Я ограничился лишь наиболее распространенными, предпочтя уделить большее внимание гибкости настройки модуля, оптимизации скорости его работы и качеству документации.
new() вызван без аргументов, то будет использована кодировка win-1251.
Если Ваш текст в кодировке KOI8-R, вызовите этот метод с параметром $codepage равным 'koi8'.
Если Вы используете другую кодировку(отличную от KOI8-R и win-1251), напишите мне, я сделаю поддержку и для нее.
Примеры:
$mat=Lingua::RU::Antimat->new; #для текста в win-1251
$mat=Lingua::RU::Antimat->new('koi8'); #для текста в KOI8-R
set_bip() описан ниже.
remove_slang()
Примеры:
$mat->set_bip(''); # просто удалим мат
$mat->set_bip('Прошу прощения!'); #длинно, но тоже правильно
Переменная $file - абсолютный или относительный путь до словаря.
Пример:
$mat->load_dict('/home/www/badwords');
Требования к словарю:
- каждая строчка в словаре должна быть словом или регулярным выражением.
- каждое cлово или регулярное выражение должно начинать и оканчивать поиск с буквы или цифры. Что, в общем-то, логично. Все, что отличается от букв и цифр, считается признаком начала слова и уже учтено при поиске или замене.
- последняя строчка в словаре не должна заканчиваться переходом на новую строку.
Никаких преобразований с полученными словами не производится. Если слова в словаре будут содержать только русские буквы, то для того чтобы обойти систему достаточно будет написать в этом матерном слове несколько букв английскими буквами. В дальнейшем, возможно, будет добавлен метод, позволяющий автоматически, где это необходимо, проставлять буквы английского алфавита, а также символы-разделители между буквами. Если это действительно нужно, дайте мне знать. Но, вообще, словарь довольно медленная вещь. Если это слово довольно распространенно, лучше всего мне его прислать, чтобы я включил его в модуль.
Пример словаря:
мама
perldoc perllocale
Андрею Скороходу, marlenus@marlenus.com за его сообщения о неточностях работы модуля.
Владимиру Жданову, vovka@lg.kamaz.net за его сообщение об ошибочном определении слова "страхует" как мата и присланных им новых словах.
Шарапову Андрею, Sharapov@tut.by за его предложения по улучшению работы модуля.
Юрию Волошину, xtc@norilsk.net за его сообщение об ошибочном распознавании фразы "я б от" и его предложениях по улучшению работы модуля.
Спасибо!
Илья Солдаткин, arc@tcen.ru
Напишите мне пару строчек, если Вы пользуетесь этим модулем. Потратьте на это пару минут в знак признательности за те многие часы, которые я потратил на написание этого модуля, его тестирование, оптимизацию, и, наконец, работу над этой документацией. В конце концов, навряд ли я буду совершенствовать этот модуль, зная, что этот модуль никому не нужен.
Copyright 2001-2003 Ilya Soldatkin. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.