Skip to content

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

License

Notifications You must be signed in to change notification settings

FlacSy/BadWords

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 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

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

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

p = ProfanityFilter()

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

Параметры

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

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

import asyncio

from badwords import ProfanityFilter


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

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


if __name__ == "__main__":
    asyncio.run(main())

Методы

initialize_language_files()

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

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

initialize_bad_words()

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

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

add_words(words: List[str])

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

Параметры
  • words (список строк): Список пользовательских слов нецензурной лексики.
Пример
await _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 = await _filter.filter_text("This is some bad text", match_threshold=0.9)
print(contains_profanity)  # True или False

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

get_all_languages()

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

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

  • Список строк, содержащий коды всех поддерживаемых языков.
Пример
all_languages = await _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-символов с похожим начертанием

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

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

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

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

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

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

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

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

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

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

import asyncio

from badwords import ProfanityFilter


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

    text ="Text with inappropriate words"

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

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

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

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

    print(result)

if __name__ == "__main__":
    asyncio.run(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

Languages