Реализация фильтрации нецензурной лексики в STT
Фильтрация нецензурной лексики в транскрипциях необходима для публичных платформ, корпоративных систем и сервисов, работающих с детьми. Реализуется на нескольких уровнях: в STT-движке и/или на уровне post-processing.
Встроенные фильтры STT-провайдеров
Google STT:
config = speech.RecognitionConfig(
profanity_filter=True, # заменяет нецензурные слова на ***
language_code="ru-RU"
)
AWS Transcribe:
transcribe.start_transcription_job(
VocabularyFilterName='profanity-filter-ru',
VocabularyFilterMethod='mask', # 'mask' | 'remove' | 'tag'
)
Azure Speech:
speech_config.set_profanity(speechsdk.ProfanityOption.Masked)
Post-processing фильтр
Для движков без встроенного фильтра или для более тонкого контроля:
import re
PROFANITY_LIST_RU = [...] # список слов в нормализованной форме
def filter_profanity(text: str, replacement: str = "***") -> str:
"""Фильтр с учётом морфологии через нормализацию"""
import pymorphy3
morph = pymorphy3.MorphAnalyzer()
words = text.split()
result = []
for word in words:
# Нормализуем слово (приводим к начальной форме)
parsed = morph.parse(word)
normal_form = parsed[0].normal_form if parsed else word.lower()
if normal_form in PROFANITY_LIST_RU:
result.append(replacement)
else:
result.append(word)
return " ".join(result)
Использование pymorphy3 критично для русского: нецензурное слово может быть в любой грамматической форме.
Логирование без хранения
Для аудита без сохранения контента — логируем факт наличия нецензурной лексики и временную метку без самого слова.
Сроки: 1–2 дня.







