Исправления критикал проблем

This commit is contained in:
2025-10-19 12:52:54 +03:00
parent 50d137ffc8
commit 44a8b54ddc
12 changed files with 166 additions and 52 deletions

View File

@@ -116,15 +116,37 @@ def contains_bad_word(text: str) -> bool:
bad_words = get_bad_words()
exceptions = get_exceptions()
# Проверяем исключения
for exception in exceptions:
if exception in text_lower:
text_lower = text_lower.replace(exception, '')
# Проверяем бранные слова
for bad_word in bad_words:
if bad_word in text_lower:
return True
# Проверяем, не является ли это слово частью исключения
# Ищем все вхождения плохого слова
start = 0
while True:
pos = text_lower.find(bad_word, start)
if pos == -1:
break
# Проверяем, входит ли это вхождение в какое-либо исключение
is_exception = False
for exception in exceptions:
# Проверяем, находится ли плохое слово внутри слова-исключения
# и содержится ли это слово-исключение в тексте в этой позиции
if bad_word in exception:
# Ищем позицию исключения, которое могло бы содержать это плохое слово
exc_start = text_lower.find(exception, max(0, pos - len(exception)))
if exc_start != -1:
exc_end = exc_start + len(exception)
# Если плохое слово находится внутри исключения
if exc_start <= pos < exc_end:
is_exception = True
break
# Если это не исключение, значит найдено плохое слово
if not is_exception:
return True
start = pos + 1
return False
@@ -148,14 +170,37 @@ def get_bad_words_from_text(text: str) -> list:
bad_words = get_bad_words()
exceptions = get_exceptions()
# Проверяем исключения
for exception in exceptions:
if exception in text_lower:
text_lower = text_lower.replace(exception, '')
# Ищем бранные слова
for bad_word in bad_words:
if bad_word in text_lower:
found_words.append(bad_word)
# Проверяем, не является ли это слово частью исключения
start = 0
word_is_valid = False
while True:
pos = text_lower.find(bad_word, start)
if pos == -1:
break
# Проверяем, входит ли это вхождение в какое-либо исключение
is_exception = False
for exception in exceptions:
if bad_word in exception:
exc_start = text_lower.find(exception, max(0, pos - len(exception)))
if exc_start != -1:
exc_end = exc_start + len(exception)
if exc_start <= pos < exc_end:
is_exception = True
break
# Если найдено хотя бы одно вхождение, которое не является исключением
if not is_exception:
word_is_valid = True
break
start = pos + 1
# Добавляем слово только если оно действительно найдено (не в исключении)
if word_is_valid:
found_words.append(bad_word)
return found_words