
Как владельцы веб-сайтов, мы несем ответственность за создание безопасного контента и пространства для наших подписчиков и пользователей. Одним из важнейших аспектов управления сайтом сообщества является защита платформы от оскорбительных высказываний и нецензурной лексики, которые могут отпугнуть людей и нанести ущерб вашей репутации.
Проблема
Нецензурная лексика и оскорбительные высказывания в постах/комментариях создают несколько серьезных проблем:
Отпугивают пользователей — многие посетители уходят, если сталкиваются с оскорбительным контентом.
Наносят ущерб репутации бренда — ваш сайт ассоциируется с негативом.
Юридические риски — возможны нарушения законов о преследовании в Интернете.
Штрафы SEO — поисковые системы могут понизить рейтинг сайтов с несоответствующим контентом
Путь к решению
В итоге размышлений о выборе решения для фильтрации нецензурной лексики на сайте я понял что мое любопытство не даст мне покоя и я решил самостоятельно реализовать такую комплексную систему автоматической фильтрации, которая работала бы в фоне незаметно для пользователя но являла бы собой надежную защиту, которую невозможно обойти.
Как это работает
В момент сохранения данных из формы создания поста, созданный в целях цензуры сервис автоматически сканирует контент, выполняя интеллектуальное сопоставление слов текста со списком нецензурных слов как на английском, так и с русском языках. Если найдено совпадение, то происходит замена нецензурного слова по определенного в списке шаблону. Если совпадение найдено в тексте поста то он переводится в статус церновика.
public function scan(string $content): array
{
$words = CensorshipWord::all();
$cleanContent = $content;
$detectedWords = [];
foreach ($words as $word) {
$pattern = '/(?<![\p{L}\p{N}])' . preg_quote($word->word, '/') . '(?![\p{L}\p{N}])/iu';
if (preg_match($pattern, $content)) {
$cleanContent = preg_replace($pattern, $word->replacement, $cleanContent);
$detectedWords[] = $word->word;
}
}
return [
'content' => $cleanContent,
'detected_words' => $detectedWords
];
}Основные реализованные функции
Автоматическая проверка текста поста и перевод в статус черновика при обнаружении
// Posts with profanity are moved to draft status
PostObserver::saving(function ($post) {
$result = $this->censorshipService->scan($post->content, 'post', $post->id, $post->user_id);
if (!empty($result['detected_words'])) {
$post->status = 'draft'; // Automatically revert to draft
$post->title = $this->censorshipService->scan($post->title)['content'];
}
});Защита в комментариях: комментарий не сохраняется.
// Offensive comments are prevented from being saved
CommentObserver::saving(function ($comment) {
$result = $this->censorshipService->scan($comment->content, 'comment', $comment->id, $comment->user_id);
if (!empty($result['detected_words'])) {
throw new \Exception('Comment contains prohibited content');
}
});Ответственность пользователя: автор такого комментария получает сообщение о недопустимых словах и может быть заблокирован.
// Users receive automatic warnings they must acknowledge
public function issueWarning(User $user, string $message, int $issuerId)
{
UserWarning::create([
'user_id' => $user->id,
'issuer_id' => $issuerId,
'message' => $message,
'is_confirmed' => false
]);
}Почему этот подход работает?
Интеллектуальное обнаружение: использует регулярные выражения с поддержкой Unicode, которые правильно обрабатывают как английский, так и русский текст, избегая ложных срабатываний с такими словами, как «басука» (которое содержит «****», но не является нецензурным).
Мягкий подход: контент фильтруется (нецензурные слова заменяются), а не полностью удаляется, что позволяет сохранить замысел пользователя и одновременно удалить оскорбительные выражения.
Образовательный подход: пользователи должны подтвердить получение предупреждения, прежде чем продолжить, что способствует улучшению поведения.
Административный контроль: суперпользователи могут управлять словарем и просматривать журналы нарушений для контроля.
Реальное воздействие
С момента внедрения:
0% оскорбительного контента попадает в открытый доступ.
Автоматическое применение 24/7 без ручной модерации.
Пользователи изучают и принимают стандарты приемлемого поведения в сообществе.
Спокойствие как для администратора, так и для посетителей)
Система работает незаметно — пользователи даже не подозревают, что их контент был отфильтрован, пока не пытаются опубликовать что-то неподобающее. Это создает саморегулирующееся сообщество, в котором качественный контент естественным образом доступен каждому.
А Вы пользуетесь ли каким-либо решением по защите от нецензурной лексики в своих проектах? Буду бесконечно благодарен если поделитесь вашими мыслями и мнением относительно такой защиты в комментариях.
Станьте первым, кто прокомментирует эту запись