НАЗВАНИЕ

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);


ОПИСАНИЕ

Этот модуль предназначен для замены, обнаружения или удаления мата из строки. Этой строкой могут быть сообщения в гостевой книге, чате или форуме. Модуль позволяет заменять мат и в тех случаях, когда русский мат написан английскими буквами или между буквами матерного выражения поставлены символы-разделители (любые символы за исключением букв или цифр. Например, пробелы, символы подчеркивания).

Я не ставил целью сделать замену всех возможных разновидностей матерных слов. Я ограничился лишь наиболее распространенными, предпочтя уделить большее внимание гибкости настройки модуля, оптимизации скорости его работы и качеству документации.

$mat=Lingua::RU::Antimat->new($codepage);
Этот метод создает новый объект. В этом методе можно также задать кодировку, в которой будет находиться строка содержащая мат. Если метод 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

$clean_text=$mat->remove_slang($dirty_text);
Этот метод заменяет мат в строке. Метод в качестве своего аргумента берет строку содержащую мат и возвращает строку, где этот мат заменен на слово 'бип', или на строку которую вы указали в методе set_bip(). Метод set_bip() описан ниже.

$bool=$mat->detect_slang($dirty_text);
Этот метод определяет есть ли мат в строке и возвращает 1, если мат найден и 0 в противном случае.

$mat->set_bip($bip);
Этот метод устанавливает строку, на которую будут заменены матерные слова методом remove_slang()

Примеры:

$mat->set_bip(''); # просто удалим мат

$mat->set_bip('Прошу прощения!'); #длинно, но тоже правильно

$mat->load_dict($file);
Этот метод загружает словарь с дополнительными матерными словами.

Переменная $file - абсолютный или относительный путь до словаря.

Пример:

$mat->load_dict('/home/www/badwords');

Требования к словарю:

- каждая строчка в словаре должна быть словом или регулярным выражением.

- каждое cлово или регулярное выражение должно начинать и оканчивать поиск с буквы или цифры. Что, в общем-то, логично. Все, что отличается от букв и цифр, считается признаком начала слова и уже учтено при поиске или замене.

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

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

Пример словаря:

мама
дедушк(?:[аеуи]|ой)
п[\W_]*а[\W_]*п[\W_]*(?:[еуыа]|о[\W_]*й)


ТАКЖЕ СМОТРИТЕ

http://www.tcen.ru/antimat

perldoc perllocale


БЛАГОДАРНОСТИ

Андрею Скороходу, marlenus@marlenus.com за его сообщения о неточностях работы модуля.
Владимиру Жданову, vovka@lg.kamaz.net за его сообщение об ошибочном определении слова "страхует" как мата и присланных им новых словах.
Шарапову Андрею, Sharapov@tut.by за его предложения по улучшению работы модуля.
Юрию Волошину, xtc@norilsk.net за его сообщение об ошибочном распознавании фразы "я б от" и его предложениях по улучшению работы модуля.

Спасибо!


АВТОР

Илья Солдаткин, arc@tcen.ru

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


COPYRIGHT

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.