Цензор-бот — алгоритм работы

1. Постановка задачи

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

Примеры работы алгоритма:

  1. "Ой бля" — "Ой ..."

  2. "Ах ты хуесос" — "Ах ты ..."

  3. "Еб твою мать" — "... твою мать"

  4. "А ну иди сюда" — остается без изменений

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

  1. Имелда Стонтон в предгорьях Гренобля изучала ассамбляж 🍷

  2. Гарик Сукачев  потребляет  скипидар  всухую.

  3. Сваебоец лечит эпидермис транспедикулярным аблятором.

Многие слова русского языка содержат в себе нецензурные слова, хотя сами по себе не являются нецензурными. С другой стороны, некоторые нецензурные слова изменены предлогами, суффиксами и окончаниями. А часто — написаны слитно и/или с ошибками. Например:

  1. Он съебал с работы на два часа раньше.

  2. Воттыжблять, обманул нас.

  3. Хуесосина хитрая!

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

2. Зачем это нужно?

Обычно алгоритмы проверки сообщений целиком удаляют сообщение, если оно содержит нецензурные слова. Это хорошее решение для программистов, но плохое для пользователей. Иногда пользователи пишут нецензурные слова случайно, перепутав клавиши. Также алгоритм цензуры может содержать ошибки, но пользователь об этом никогда не узнает. Сообщение может быть очень длинным, содержать глубокую мысль, но из-за одного нецензурного слова будет удалено. Такие ситуации очень раздражают пользователей.

Примеры работы бота:

  1. "Эта информаци есть на сайте imdi, причём на главной странице, не обязательно кидать новость с паблика ...ских вы...ков"

  2. "Не хватает "вы все ...ы а я Д'Артан"

  3. "Я лично знаю людей, которые ходили на ...практики. Эмпатию к ним я испытываю только в пьяном виде"

Нет ни одной большой площадки, где бы был реализован подобный алгоритм.

Домовые чаты, рабочие чаты, чаты по интересам, чаты школьников и студентов — это места, где алгоритм востребован.

3. Белый и черный списки

Алгоритм использует белый и черный списки. Рассмотрим простой пример.

Белый список:

  1. "рубля",
    "страху"

Черный список:

  1. "бля",
    "хуй",
    "пиздец"

Текст для цензуры:

  1. Ну пиздец, бля, как я его застрахую, если у него нет ни рубля?

Разбор текста:

  1. Ну пиздец, бля, как я его застрахую, если у него нет ни рубля?

Результат:

  1. Ну ..., ..., как я его застрахую, если у него нет ни рубля?

Белый список содержит фрагменты слов, которые "защищают" слово от цензуры. Черный список содержит слова, которые нужно вырезать.

4. Дьявол в деталях

Обмануть алгоритм просто, достаточно заменить один символ латинской буквой. Или добавить пробелы. Или даже шум.

Кроме русского языка кириллический алфавит используют еще более 10 языков. И многие при этом используют русский мат.

Имея более 10 кириллических алфавитов, обязательно найдется слово, которое будет нецензурным в одном языке и одновременно часто используемым в другом. Поэтому основной язык алгоритма — русский.

Имена собственные, названия компаний, географические названия и т.д. доставляют массу хлопот.

Несмотря на все нюансы, алгоритм работает отлично в 99% случаев.

5. Снизить негатив

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

Для админа. Когда срабатывает бот, это является сигналом: возможно, в чате начинается флейм.

Для пользователя сигнал такой: возможно, стоит взять паузу и подумать о том, что происходит.

Многие пользователи искренне ненавидят цензор-бота, потому что он ВСЕГДА удаляет мат в самый неподходящий момент. Этим, собственно бот и ценен.