Как настроить фильтрацию нецензурной лексики в telegram боте?

Как добавить фильтр нецензурной лексики в бота, чтобы при отправке анонимных сообщений заменять мат слова на звездочки без уведомления для отправителя? Есть ли готовая библиотека для фильтрации или нужно писать собственный алгоритм?
  • 29 сентября 2023 г. 10:38
Ответы на вопрос 2
Есть несколько способов настроить фильтрацию нецензурной лексики в Telegram боте. Рассмотрим два из них:

1. Использование готовой библиотеки:
- Одной из таких библиотек является "profanity-check". Она предоставляет готовые алгоритмы для определения нецензурных слов в тексте. Вы можете установить ее, добавив в ваш проект команду `pip install profanity-check`.
- После установки вы сможете использовать ее в своем Telegram боте следующим образом:

```python
import profanity_check

def filter_text(text):
    words = text.split()
    filtered_words = []
    for word in words:
        if not profanity_check.predict([word])[0]:
            filtered_words.append(word)
        else:
            filtered_words.append('*' * len(word))
    filtered_text = ' '.join(filtered_words)
    return filtered_text
```

В данном примере функция `filter_text` принимает текст и проверяет каждое слово на наличие нецензурной лексики с помощью функции `profanity_check.predict()`. Если слово является нецензурным, оно заменяется на звездочки той же длины. Затем отфильтрованные слова объединяются в строку.

2. Создание собственного алгоритма:
- Если вы предпочитаете создать собственный алгоритм фильтрации, вы можете воспользоваться списком нецензурных слов, составленным вручную или найденным в открытых источниках.
- Для каждого полученного сообщения вы можете пройтись по списку нецензурных слов и заменить их на звездочки или другую замену, используя функцию `replace()`.

```python
def filter_text(text, bad_words):
    filtered_text = text
    for word in bad_words:
        filtered_text = filtered_text.replace(word, '*' * len(word))
    return filtered_text
```

В данном примере функция `filter_text` принимает текст и список нецензурных слов. Затем она проходит по списку и заменяет каждое вхождение соответствующего нецензурного слова на звездочки. Отфильтрованный текст возвращается.

Выбор используемого метода фильтрации зависит от ваших конкретных потребностей и предпочтений.
Опыт модерирования форумов рунета показывает, что блокировка мата неэффективна. В русском языке существует множество способов скрыть ругательства, например, использование стихотворных форм, метафор, замены кириллических символов на похожие символы Unicode, печать псевдографикой и т.д. Обычно фильтрацией матерных выражений занимаются администраторы канала. Однако, если вы вводите интеллект, который изменяет сообщения, часть пользователей может покинуть канал. Либералы будут считать, что у них есть свобода печати, а вы автоматически цензурируете их. Кроме того, есть хакеры, которые будут пытаться обойти ваш фильтр мата, и они всегда будут нашли способ победить его. Борьба с матерными выражениями и защита от них - это бесконечный круговорот, и вы будете всегда вынуждены вводить новые правила.
Похожие вопросы