Skip to content

FlacSy/BadWords

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bad Words

Оглавление

  1. Описание
  2. Установка
  3. Использование
  4. Поддерживаемые языки
  5. Расширенные возможности фильтрации
  6. Полный пример использования

Описание

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

Установка

Требования

  • Рекомендуемая версия: Python 3.13
  • Минимальная версия: Python 3.10
  • Поддерживаемые версии: Python 3.10 и выше

GitHub

pip3 install git+https://github.com/FlacSy/badwords.git

Использование

Инициализация

from badwords import ProfanityFilter

p = ProfanityFilter()

p.init(languages: List[str] | None = None)

Параметры

  • languages (список строк, необязательно): Список языков, для которых будут загружены слова нецензурной лексики. Если не указано, будут использованы все доступные языки.

Примеры использования

from badwords import ProfanityFilter


def main() -> None:
    # Инициализация с использованием английского и испанского языков
    _filter = ProfanityFilter()
    _filter.init(["en", "sp"])

    # Инициализация с использованием всех доступных языков
    _filter.init()


if __name__ == "__main__":
    main()

Методы

initialize_language_files()

Инициализация файлов языков.

Возвращаемое значение
  • Словарь, который сопоставляет имена языков с путями к файлам.
Пример
language_files = _filter.initialize_language_files()
print(language_files)

initialize_bad_words()

Инициализация слов нецензурной лексики для каждого языка.

Возвращаемое значение
  • Словарь, который сопоставляет имена языков с наборами слов нецензурной лексики.
Пример
bad_words = _filter.initialize_bad_words()
print(bad_words)

add_words(words: List[str])

Добавление пользовательских слов нецензурной лексики в фильтр.

Параметры
  • words (список строк): Список пользовательских слов нецензурной лексики.
Пример
_filter.add_words(["customword1", "customword2"])

similar(a: str, b: str)

Вычисление коэффициента сходства между двумя строками.

Параметры
  • a (строка): Первая строка.
  • b (строка): Вторая строка.
Возвращаемое значение
  • Коэффициент сходства (дробное число).

filter_text(text: str, match_threshold: float = 0.8, replace_character=None)

Проверка, содержит ли заданный текст нецензурную лексику.

Параметры
  • text (строка): Входной текст для проверки.
  • match_threshold (дробное число, необязательно): Порог для совпадения по схожести. По умолчанию 0.8.
    • Значение от 0.0 до 1.0, где 1.0 означает точное совпадение
    • Более низкие значения увеличивают количество найденных совпадений, но значительно замедляют работу
    • Рекомендуемые значения: 0.9-0.95 для баланса между точностью и производительностью
    • При значении 1.0 проверка работает максимально быстро
  • replace_character (символ или None, необязательно): Символ для замены непристойных слов. Если None, возвращает True/False. По умолчанию None.

Важно: Использование similarity matching (match_threshold < 1.0) значительно замедляет работу фильтра. Рекомендуется:

  • Использовать базовую проверку (match_threshold=1.0) для быстрой фильтрации
  • Включать similarity matching только когда нужна более строгая проверка
  • Использовать более высокие значения match_threshold (0.95) для лучшей производительности
Возвращаемое значение
  • True если найдена нецензурная лексика, False в противном случае. Если replace_character указан, возвращает отфильтрованный текст.
Пример
# Проверка на наличие нецензурной лексики
contains_profanity = _filter.filter_text("This is some bad text", match_threshold=0.9)
print(contains_profanity)  # True или False

# Проверка на наличие нецензурной лексики с заменой
filtered_text = _filter.filter_text("This is some bad text", replace_character="*")
print(filtered_text)  # Текст с заменёнными непристойными словами

get_all_languages()

Получение списка всех доступных языков.

Возвращаемое значение

  • Список строк, содержащий коды всех поддерживаемых языков.
Пример
all_languages = _filter.get_all_languages()
print(all_languages)  # ["en", "sp", "fr", "de", ...]

Поддерживаемые языки

В настоящее время BadWords поддерживает 26 языков:

  • br - Португальский (Бразилия)
  • cz - Чешский
  • da - Датский
  • de - Немецкий
  • du - Голландский
  • en - Английский
  • fi - Финский
  • fr - Французский
  • gr - Греческий
  • hu - Венгерский
  • in - Индонезийский
  • it - Итальянский
  • ja - Японский
  • ko - Корейский
  • lt - Литовский
  • no - Норвежский
  • pl - Польский
  • po - Португальский (Европейский)
  • ro - Румынский
  • ru - Русский
  • sp - Испанский
  • sw - Шведский
  • th - Тайский
  • tu - Турецкий
  • ua - Украинский

Расширенные возможности фильтрации

BadWords обладает мощными возможностями для обнаружения замаскированных нецензурных выражений:

Транслитерация

  • Автоматическое преобразование между кириллицей и латиницей
  • Обнаружение слов, написанных в разных алфавитах
  • Поддержка сложных случаев транслитерации

Нормализация текста

  • Приведение к нижнему регистру
  • Удаление диакритических знаков
  • Удаление специальных символов и знаков препинания
  • Агрессивная нормализация для удаления нестандартных символов

Обнаружение гомоглифов

  • Выявление символов, визуально похожих на буквы
  • Замена декоративных и математических символов
  • Обработка Unicode-символов с похожим начертанием

Частотный анализ

  • Учет наиболее распространенных способов обхода фильтрации
  • Адаптивная система подстановки символов
  • Обучение на основе частоты использования различных замен

Многослойная фильтрация

  • Последовательное применение различных методов фильтрации
  • Комбинирование результатов разных уровней проверки
  • Повышенная точность обнаружения замаскированных слов

Примеры работы с замаскированными словами

# Обнаружение слов с использованием разных алфавитов
_filter.filter_text("hеllо")  # Обнаружит "hello" с кириллической 'е'

# Обнаружение слов с заменой символов
_filter.filter_text("h3ll0")  # Обнаружит "hello" с заменой букв на цифры

# Обнаружение слов с использованием гомоглифов
_filter.filter_text("h⍺llo")  # Обнаружит "hello" с использованием альтернативных символов

# Обнаружение слов с транслитерацией
_filter.filter_text("привет")  # Обнаружит "privet" в латинице

Полный пример использования

from badwords import ProfanityFilter


def main() -> None:
    # Создаем экземпляр фильтра, указывая нужные языки
    _filter = ProfanityFilter()
    _filter.init(["en", "sp"])

    text ="Text with inappropriate words"

    check_profanity(_filter, text)
    check_profanity_with_replace(_filter, text)

# Функция для проверки текста на наличие нецензурной лексики
def check_profanity(_filter: ProfanityFilter, text: str) -> None:
    result = _filter.filter_text(
        text=text,
        match_threshold=0.9,
    )

    if result:
        print("Этот текст содержит нецензурную лексику.")
    else:
        print("Этот текст не содержит нецензурной лексики.")

# Функция для проверки текста на наличие нецензурной лексики с заменой
def check_profanity_with_replace(_filter: ProfanityFilter, text: str) -> str:
    result = _filter.filter_text(
        text=text,
        match_threshold=0.8,
        replace_character="*",
    )

    print(result)

if __name__ == "__main__":
    main()

About

This library is needed to check text for bad words in different languages.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages