- Описание
- Установка
- Использование
- Поддерживаемые языки
- Расширенные возможности фильтрации
- Полный пример использования
BadWords - это мощная библиотека для фильтрации нецензурной лексики из текста. Она поддерживает различные языки, позволяет добавлять пользовательские слова и обладает расширенными возможностями для обнаружения замаскированных нецензурных выражений.
- Рекомендуемая версия: Python 3.13
- Минимальная версия: Python 3.10
- Поддерживаемые версии: Python 3.10 и выше
pip3 install git+https://github.com/FlacSy/badwords.gitfrom 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()Инициализация файлов языков.
- Словарь, который сопоставляет имена языков с путями к файлам.
language_files = _filter.initialize_language_files()
print(language_files)Инициализация слов нецензурной лексики для каждого языка.
- Словарь, который сопоставляет имена языков с наборами слов нецензурной лексики.
bad_words = _filter.initialize_bad_words()
print(bad_words)Добавление пользовательских слов нецензурной лексики в фильтр.
words(список строк): Список пользовательских слов нецензурной лексики.
_filter.add_words(["customword1", "customword2"])Вычисление коэффициента сходства между двумя строками.
a(строка): Первая строка.b(строка): Вторая строка.
- Коэффициент сходства (дробное число).
Проверка, содержит ли заданный текст нецензурную лексику.
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) # Текст с заменёнными непристойными словамиПолучение списка всех доступных языков.
- Список строк, содержащий коды всех поддерживаемых языков.
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()