Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1815,8 +1815,8 @@ def check_forbidden_words(message):
|
|
1815 |
r'№\s?1\b', r'номер\sодин\b', r'номер\s1\b',
|
1816 |
r'вкусный', r'дешёвый', r'продукт',
|
1817 |
r'спам', r'банкротство', r'долг[и]?', r'займ',
|
1818 |
-
r'срочный', r'главный',
|
1819 |
-
r'гарантия', r'успех', r'лидер'
|
1820 |
]
|
1821 |
|
1822 |
# Удаляем знаки препинания для корректного анализа
|
@@ -1898,10 +1898,12 @@ def check_no_double_verbs(message):
|
|
1898 |
def check_no_participles(message):
|
1899 |
morph = pymorphy3.MorphAnalyzer()
|
1900 |
words = message.split()
|
1901 |
-
|
1902 |
|
1903 |
-
for
|
1904 |
-
|
|
|
|
|
1905 |
return False
|
1906 |
return True
|
1907 |
|
@@ -2136,6 +2138,9 @@ def check_no_word_repetitions(message):
|
|
2136 |
|
2137 |
# Проверки на LLM
|
2138 |
|
|
|
|
|
|
|
2139 |
def parse_json_response(response):
|
2140 |
try:
|
2141 |
# Попытка найти JSON-подобную структуру в ответе
|
@@ -2149,13 +2154,30 @@ def parse_json_response(response):
|
|
2149 |
json_str += '}'
|
2150 |
result = json.loads(json_str)
|
2151 |
return result
|
|
|
|
|
2152 |
else:
|
2153 |
-
|
2154 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2155 |
except Exception as e:
|
2156 |
print(f"Ошибка при разборе JSON: {e}")
|
2157 |
return None
|
2158 |
|
|
|
2159 |
def cut_message(message):
|
2160 |
# Удаляем любой дополнительный текст, например, "------\nКоличество знаков: ..."
|
2161 |
# Разделяем сообщение по '------' и берем первую часть
|
@@ -2175,20 +2197,16 @@ def check_disconnected_sentences(message):
|
|
2175 |
prompt = f'''Проверь следующий текст на наличие сложных предложений, где отсутствует логическая связь между частями:
|
2176 |
"{message_clean}"
|
2177 |
Определи, есть ли в тексте предложения с несколькими частями, которые кажутся несвязанными, не поддерживают общую мысль или делают текст трудным для понимания.
|
2178 |
-
|
2179 |
Обрати внимание, что в контексте коротких рекламных сообщений допустимы краткие предложения, перечисления и фразы, которые вместе передают связную информацию о продукте или услуге. Не считай такие сообщения несвязанными, если их части логически связаны с предложением продукта или условиями его получения.
|
2180 |
-
|
2181 |
Пример ответа:
|
2182 |
-
{{"decision":
|
2183 |
-
|
2184 |
Если в тексте **есть** сложные предложения без логической связи между частями, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2185 |
если таких предложений **нет**, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2186 |
-
|
2187 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь **только** в формате JSON с закрывающими кавычками и скобками.**'''
|
2188 |
|
2189 |
-
response =
|
2190 |
time.sleep(3) # Задержка в 3 секунды между запросами
|
2191 |
-
print("
|
2192 |
result = parse_json_response(response)
|
2193 |
if result is not None:
|
2194 |
decision = result.get("decision", False)
|
@@ -2213,9 +2231,9 @@ def check_synonymous_members(message):
|
|
2213 |
если таких слов или выражений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2214 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2215 |
|
2216 |
-
response =
|
2217 |
time.sleep(3)
|
2218 |
-
print("
|
2219 |
result = parse_json_response(response)
|
2220 |
if result is not None:
|
2221 |
decision = result.get("decision", False)
|
@@ -2228,29 +2246,27 @@ def check_synonymous_members(message):
|
|
2228 |
|
2229 |
# 24. Проверка на шокирующие, экстравагантные или кликбейтные фразы
|
2230 |
def check_clickbait_phrases(message):
|
|
|
2231 |
print()
|
2232 |
print("Проверка 24: Проверка на шокирующие, экстравагантные или кликбейтные фразы")
|
2233 |
print()
|
2234 |
-
message_clean = cut_message(message)
|
2235 |
prompt = f'''Проверь следующий текст на наличие шокирующих, экстравагантных или кликбейтных фраз:
|
2236 |
"{message_clean}"
|
2237 |
-
|
2238 |
Инструкции:
|
2239 |
1. Игнорируй фразы, которые основаны на фактической информации, даже если они выглядят сенсационно, такие как "лимит до миллиона" или "льготный период до 365 дней". Если эти данные подтверждаются и не являются преувеличением, их не следует считать кликбейтом.
|
2240 |
2. Ищи фразы, которые явно преувеличивают или вводят в заблуждение, обещая нечто чрезмерно идеализированное или сенсационное, что не может быть доказано или подтверждено. Примеры кликбейтных фраз: "Шокирующая правда", "Вы не поверите, что произошло", "Это изменит вашу жизнь за один день".
|
2241 |
3. Стандартные рекламные призывы к действию, такие как "купите сейчас" или "узнайте больше", не считаются кликбейтом, если они не преувеличивают преимущества или не используют явную манипуляцию эмоциями.
|
2242 |
-
|
2243 |
Пример ответа:
|
2244 |
-
{{"decision":
|
2245 |
|
2246 |
Если текст содержит кликбейтные фразы, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2247 |
если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2248 |
|
2249 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2250 |
|
2251 |
-
response =
|
2252 |
time.sleep(3)
|
2253 |
-
print("
|
2254 |
result = parse_json_response(response)
|
2255 |
if result is not None:
|
2256 |
decision = result.get("decision", False)
|
@@ -2272,21 +2288,56 @@ def check_abstract_claims(message):
|
|
2272 |
|
2273 |
Инструкции:
|
2274 |
1. Исключи фразы, которые содержат конкретные числовые данные, обещания о времени выполнения или другие факты, которые могут быть проверены (например, "от 1 минуты", "24/7", "в течение 24 часов").
|
2275 |
-
2. Не считай абстрактными фразами выражения, которые описывают
|
2276 |
-
3.
|
2277 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2278 |
|
2279 |
Пример ответа:
|
2280 |
-
{{"decision":
|
2281 |
|
2282 |
Если в тексте присутствуют абстрактные или неподкрепленные заявления, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2283 |
если таких утверждений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2284 |
|
2285 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2286 |
|
2287 |
-
response =
|
2288 |
time.sleep(3)
|
2289 |
-
print("
|
2290 |
result = parse_json_response(response)
|
2291 |
if result is not None:
|
2292 |
decision = result.get("decision", False)
|
@@ -2314,16 +2365,16 @@ def check_specialized_terms(message):
|
|
2314 |
Определи, содержит ли текст термины, которые известны только специалистам в определенной области и могут вызвать затруднения у обычных читателей.
|
2315 |
|
2316 |
Пример ответа:
|
2317 |
-
{{"decision":
|
2318 |
|
2319 |
Если в тексте есть такие узкоспециализированные термины, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2320 |
если таких терминов нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2321 |
|
2322 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2323 |
|
2324 |
-
response =
|
2325 |
time.sleep(3)
|
2326 |
-
print("
|
2327 |
result = parse_json_response(response)
|
2328 |
if result is not None:
|
2329 |
decision = result.get("decision", False)
|
@@ -2345,14 +2396,14 @@ def check_offensive_phrases(message):
|
|
2345 |
Обрати внимание, что фразы, используемые в обычном деловом контексте и не содержащие явных оскорблений, дискриминации или непристойностей, не считаются проблемными.
|
2346 |
Например, фразы, объясняющие преимущества продукта, такие как "без отчётов и комиссий", являются допустимыми.
|
2347 |
Пример ответа:
|
2348 |
-
{{"decision":
|
2349 |
Если такие фразы есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2350 |
если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2351 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2352 |
|
2353 |
-
response =
|
2354 |
time.sleep(3)
|
2355 |
-
print("
|
2356 |
result = parse_json_response(response)
|
2357 |
if result is not None:
|
2358 |
decision = result.get("decision", False)
|
@@ -2368,51 +2419,136 @@ def check_cliches_and_bureaucratese(message):
|
|
2368 |
print("Проверка 28: Проверка на речевые клише, рекламные штампы и канцеляризмы")
|
2369 |
print()
|
2370 |
message_clean = cut_message(message)
|
2371 |
-
prompt = f'''Проверь следующий текст на наличие речевых клише, излишне употребляемых фраз, рекламных штампов и канцеляризмов, которые делают текст менее выразительным и
|
2372 |
-
|
2373 |
-
|
2374 |
-
|
2375 |
-
|
2376 |
-
|
2377 |
-
-
|
2378 |
-
|
2379 |
-
|
2380 |
-
|
2381 |
-
-
|
2382 |
-
|
2383 |
-
-
|
2384 |
-
|
2385 |
-
-
|
2386 |
-
|
2387 |
-
|
2388 |
-
|
2389 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2390 |
|
2391 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2392 |
|
2393 |
-
- Являются избитыми фразами, не добавляющими ценности сообщению (например, "мы заботимся о вас", "качество проверенное временем").
|
2394 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2395 |
"{message_clean}"
|
|
|
|
|
|
|
2396 |
|
2397 |
-
|
2398 |
-
|
2399 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2400 |
|
2401 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2402 |
|
2403 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2404 |
|
2405 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2406 |
|
2407 |
-
response =
|
2408 |
time.sleep(3)
|
2409 |
-
print("
|
2410 |
result = parse_json_response(response)
|
2411 |
if result is not None:
|
2412 |
decision = result.get("decision", False)
|
2413 |
explanation = result.get("explanation", "")
|
2414 |
print("Explanation:", explanation)
|
2415 |
-
return not decision
|
2416 |
else:
|
2417 |
return None
|
2418 |
|
@@ -2426,7 +2562,7 @@ def safe_check(func, message):
|
|
2426 |
# Optionally, you can log the exception here if needed
|
2427 |
return None # Indicate that the check could not be performed
|
2428 |
|
2429 |
-
def perform_checks(message):
|
2430 |
checks = {
|
2431 |
"forbidden_words": safe_check(check_forbidden_words, message),
|
2432 |
"client_addressing": safe_check(check_no_greeting, message),
|
@@ -2454,7 +2590,10 @@ def perform_checks(message):
|
|
2454 |
"abstract_claims": safe_check(check_abstract_claims, message),
|
2455 |
"specialized_terms": safe_check(check_specialized_terms, message),
|
2456 |
"offensive_phrases": safe_check(check_offensive_phrases, message),
|
2457 |
-
"cliches_and_bureaucratese": safe_check(check_cliches_and_bureaucratese, message)
|
|
|
|
|
|
|
2458 |
}
|
2459 |
return checks
|
2460 |
|
@@ -2487,7 +2626,10 @@ def format_checks(checks):
|
|
2487 |
"abstract_claims": "Абстрактные заявления без доказательств",
|
2488 |
"specialized_terms": "Узкоспециализированные термины",
|
2489 |
"offensive_phrases": "Двусмысленные или оскорбительные фразы",
|
2490 |
-
"cliches_and_bureaucratese": "Речевые клише, рекламные штампы, канцеляризмы"
|
|
|
|
|
|
|
2491 |
}
|
2492 |
formatted_results = []
|
2493 |
for rule, result in checks.items():
|
|
|
1815 |
r'№\s?1\b', r'номер\sодин\b', r'номер\s1\b',
|
1816 |
r'вкусный', r'дешёвый', r'продукт',
|
1817 |
r'спам', r'банкротство', r'долг[и]?', r'займ',
|
1818 |
+
r'срочный', r'главный', r'зп', r'минималка',
|
1819 |
+
r'гарантия', r'успех', r'лидер', r'никакой'
|
1820 |
]
|
1821 |
|
1822 |
# Удаляем знаки препинания для корректного анализа
|
|
|
1898 |
def check_no_participles(message):
|
1899 |
morph = pymorphy3.MorphAnalyzer()
|
1900 |
words = message.split()
|
1901 |
+
exceptions = {"повышенный", "увеличенный", "пониженный", "сниженный"}
|
1902 |
|
1903 |
+
for word in words:
|
1904 |
+
parsed_word = morph.parse(word)[0]
|
1905 |
+
lemma = parsed_word.normal_form
|
1906 |
+
if 'PRTF' in parsed_word.tag and lemma not in exceptions:
|
1907 |
return False
|
1908 |
return True
|
1909 |
|
|
|
2138 |
|
2139 |
# Проверки на LLM
|
2140 |
|
2141 |
+
import re
|
2142 |
+
import json
|
2143 |
+
|
2144 |
def parse_json_response(response):
|
2145 |
try:
|
2146 |
# Попытка найти JSON-подобную структуру в ответе
|
|
|
2154 |
json_str += '}'
|
2155 |
result = json.loads(json_str)
|
2156 |
return result
|
2157 |
+
|
2158 |
+
# Если JSON не найден, пытаемся найти ключ-значение вручную
|
2159 |
else:
|
2160 |
+
decision_match = re.search(r'decision:\s*(true|false)', response)
|
2161 |
+
explanation_match = re.search(r'explanation:\s*"(.+?)"', response)
|
2162 |
+
|
2163 |
+
result = {}
|
2164 |
+
if decision_match:
|
2165 |
+
decision_value = decision_match.group(1)
|
2166 |
+
result['decision'] = True if decision_value == 'true' else False
|
2167 |
+
|
2168 |
+
if explanation_match:
|
2169 |
+
result['explanation'] = explanation_match.group(1)
|
2170 |
+
|
2171 |
+
if result:
|
2172 |
+
return result
|
2173 |
+
else:
|
2174 |
+
print("JSON не найден, и ключи 'decision' и 'explanation' не извлечены")
|
2175 |
+
return None
|
2176 |
except Exception as e:
|
2177 |
print(f"Ошибка при разборе JSON: {e}")
|
2178 |
return None
|
2179 |
|
2180 |
+
|
2181 |
def cut_message(message):
|
2182 |
# Удаляем любой дополнительный текст, например, "------\nКоличество знаков: ..."
|
2183 |
# Разделяем сообщение по '------' и берем первую часть
|
|
|
2197 |
prompt = f'''Проверь следующий текст на наличие сложных предложений, где отсутствует логическая связь между частями:
|
2198 |
"{message_clean}"
|
2199 |
Определи, есть ли в тексте предложения с несколькими частями, которые кажутся несвязанными, не поддерживают общую мысль или делают текст трудным для понимания.
|
|
|
2200 |
Обрати внимание, что в контексте коротких рекламных сообщений допустимы краткие предложения, перечисления и фразы, которые вместе передают связную информацию о продукте или услуге. Не считай такие сообщения несвязанными, если их части логически связаны с предложением продукта или условиями его получения.
|
|
|
2201 |
Пример ответа:
|
2202 |
+
{{"decision": false, "explanation": "Текст понятен, и все предложения логически связаны между собой."}}
|
|
|
2203 |
Если в тексте **есть** сложные предложения без логической связи между частями, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2204 |
если таких предложений **нет**, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
|
|
2205 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь **только** в формате JSON с закрывающими кавычками и скобками.**'''
|
2206 |
|
2207 |
+
response = generate_message_gpt4o_mini(prompt)
|
2208 |
time.sleep(3) # Задержка в 3 секунды между запросами
|
2209 |
+
print("GPT-4o-mini response:", response) # Выводим полный ответ модели
|
2210 |
result = parse_json_response(response)
|
2211 |
if result is not None:
|
2212 |
decision = result.get("decision", False)
|
|
|
2231 |
если таких слов или выражений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2232 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2233 |
|
2234 |
+
response = generate_message_gpt4o_mini(prompt)
|
2235 |
time.sleep(3)
|
2236 |
+
print("GPT-4o-mini response:", response)
|
2237 |
result = parse_json_response(response)
|
2238 |
if result is not None:
|
2239 |
decision = result.get("decision", False)
|
|
|
2246 |
|
2247 |
# 24. Проверка на шокирующие, экстравагантные или кликбейтные фразы
|
2248 |
def check_clickbait_phrases(message):
|
2249 |
+
message_clean = cut_message(message)
|
2250 |
print()
|
2251 |
print("Проверка 24: Проверка на шокирующие, экстравагантные или кликбейтные фразы")
|
2252 |
print()
|
|
|
2253 |
prompt = f'''Проверь следующий текст на наличие шокирующих, экстравагантных или кликбейтных фраз:
|
2254 |
"{message_clean}"
|
|
|
2255 |
Инструкции:
|
2256 |
1. Игнорируй фразы, которые основаны на фактической информации, даже если они выглядят сенсационно, такие как "лимит до миллиона" или "льготный период до 365 дней". Если эти данные подтверждаются и не являются преувеличением, их не следует считать кликбейтом.
|
2257 |
2. Ищи фразы, которые явно преувеличивают или вводят в заблуждение, обещая нечто чрезмерно идеализированное или сенсационное, что не может быть доказано или подтверждено. Примеры кликбейтных фраз: "Шокирующая правда", "Вы не поверите, что произошло", "Это изменит вашу жизнь за один день".
|
2258 |
3. Стандартные рекламные призывы к действию, такие как "купите сейчас" или "узнайте больше", не считаются кликбейтом, если они не преувеличивают преимущества или не используют явную манипуляцию эмоциями.
|
|
|
2259 |
Пример ответа:
|
2260 |
+
{{"decision": false, "explanation": "Текст нейтрален и не содержит кликбейтных фраз."}}
|
2261 |
|
2262 |
Если текст содержит кликбейтные фразы, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2263 |
если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2264 |
|
2265 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2266 |
|
2267 |
+
response = generate_message_gpt4o_mini(prompt)
|
2268 |
time.sleep(3)
|
2269 |
+
print("GPT-4o-mini response:", response)
|
2270 |
result = parse_json_response(response)
|
2271 |
if result is not None:
|
2272 |
decision = result.get("decision", False)
|
|
|
2288 |
|
2289 |
Инструкции:
|
2290 |
1. Исключи фразы, которые содержат конкретные числовые данные, обещания о времени выполнения или другие факты, которые могут быть проверены (например, "от 1 минуты", "24/7", "в течение 24 часов").
|
2291 |
+
2. Не считай абстрактными фразами выражения, которые описывают конкретные выгодные условия, если они сопровождаются фактами или цифрами (например, "выгодные условия при покупке от 100 000 рублей" или "индивидуальные условия с процентной ставкой 3%").
|
2292 |
+
3. Помечай абстрактными фразами любые утверждения, которые звучат эмоционально, но не сопровождаются конкретикой, такие как:
|
2293 |
+
- "выгодное финансирование"
|
2294 |
+
- "развивайте свой бизнес быстрее"
|
2295 |
+
- "повышение эффективности"
|
2296 |
+
- "эффективное управление"
|
2297 |
+
- "надёжное решение"
|
2298 |
+
- "оптимизируйте управление финансами"
|
2299 |
+
- "выгодные условия для бизнеса"
|
2300 |
+
- "лёгкие условия и кэшбэк"
|
2301 |
+
- "мобильно, удобно, комфортно"
|
2302 |
+
- "Ваш бизнес заслуживает лучшего!"
|
2303 |
+
- "Подключите сейчас и оцените удобство!"
|
2304 |
+
- "сэкономьте своё время"
|
2305 |
+
- "быстро и бесплатно"
|
2306 |
+
- "Удобство и комфорт для вас и ваших сотрудников!"
|
2307 |
+
- "стал ещё удобнее"
|
2308 |
+
- "Это удобно и экономит ваше время"
|
2309 |
+
- "Это удобно и просто, особенно когда нужно быстро провести расчет"
|
2310 |
+
- "Управляйте эффективно с «СберБизнес»!"
|
2311 |
+
- "просто, быстро и удобно"
|
2312 |
+
- "Всё просто"
|
2313 |
+
- "Используй карту на полную мощь и контролируй расходы сотрудников"
|
2314 |
+
- "Это позволит вам снизить затраты на обслуживание и оптимизировать бизнес-расходы"
|
2315 |
+
- "в удобном для вас интернет-банке СберБизнес"
|
2316 |
+
- "Условия просты и прозрачны"
|
2317 |
+
4. Ищи эмоционально заряженные или мотивирующие фразы, которые не уточняют, как это достижимо, такие как:
|
2318 |
+
- "эксклюзивные возможности"
|
2319 |
+
- "новые возможности для твоего бизнеса"
|
2320 |
+
- "Пора действовать!"
|
2321 |
+
- "Откройте для себя комфорт классического Онлайна"
|
2322 |
+
- "наслаждайтесь высокой ставкой"
|
2323 |
+
- "Никаких минимальных сумм — ваш успех начинается здесь!"
|
2324 |
+
- "Максимальная выгода и гибкие условия"
|
2325 |
+
- "Присоединяйся к успеху уже сегодня!"
|
2326 |
+
- "зарабатывай больше"
|
2327 |
+
5. Ищи общие фразы, которые не дают представления о конкретной пользе, такие как "лучшее решение", "высокое качество", "отличный сервис", если они не сопровождаются пояснени��м о том, почему это так.
|
2328 |
+
6. Учитывай, что в рекламных сообщениях допустимы эмоциональные и обобщённые фразы, если они достаточно конкретны для понимания аудитории, однако они должны сопровождаться фактами или подробными примерами.
|
2329 |
|
2330 |
Пример ответа:
|
2331 |
+
{{"decision": false, "explanation": "Текст не содержит абстрактные утверждения без конкретики."}}
|
2332 |
|
2333 |
Если в тексте присутствуют абстрактные или неподкрепленные заявления, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2334 |
если таких утверждений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2335 |
|
2336 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2337 |
|
2338 |
+
response = generate_message_gpt4o_mini(prompt)
|
2339 |
time.sleep(3)
|
2340 |
+
print("GPT-4o-mini response:", response)
|
2341 |
result = parse_json_response(response)
|
2342 |
if result is not None:
|
2343 |
decision = result.get("decision", False)
|
|
|
2365 |
Определи, содержит ли текст термины, которые известны только специалистам в определенной области и могут вызвать затруднения у обычных читателей.
|
2366 |
|
2367 |
Пример ответа:
|
2368 |
+
{{"decision": false, "explanation": "В тексте отсутствуют узкоспециализированные термины."}}
|
2369 |
|
2370 |
Если в тексте есть такие узкоспециализированные термины, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2371 |
если таких терминов нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2372 |
|
2373 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2374 |
|
2375 |
+
response = generate_message_gpt4o_mini(prompt)
|
2376 |
time.sleep(3)
|
2377 |
+
print("GPT-4o-mini response:", response)
|
2378 |
result = parse_json_response(response)
|
2379 |
if result is not None:
|
2380 |
decision = result.get("decision", False)
|
|
|
2396 |
Обрати внимание, что фразы, используемые в обычном деловом контексте и не содержащие явных оскорблений, дискриминации или непристойностей, не считаются проблемными.
|
2397 |
Например, фразы, объясняющие преимущества продукта, такие как "без отчётов и комиссий", являются допустимыми.
|
2398 |
Пример ответа:
|
2399 |
+
{{"decision": false, "explanation": "Текст не содержит обидных или двусмысленных фраз."}}
|
2400 |
Если такие фразы есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
|
2401 |
если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
|
2402 |
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2403 |
|
2404 |
+
response = generate_message_gpt4o_mini(prompt)
|
2405 |
time.sleep(3)
|
2406 |
+
print("GPT-4o-mini response:", response)
|
2407 |
result = parse_json_response(response)
|
2408 |
if result is not None:
|
2409 |
decision = result.get("decision", False)
|
|
|
2419 |
print("Проверка 28: Проверка на речевые клише, рекламные штампы и канцеляризмы")
|
2420 |
print()
|
2421 |
message_clean = cut_message(message)
|
2422 |
+
prompt = f'''Проверь следующий текст на наличие речевых клише, излишне употребляемых фраз, рекламных штампов и канцеляризмов, которые делают текст менее выразительным и оригинальным:
|
2423 |
+
"{message_clean}"
|
2424 |
+
Обрати внимание **только** на избитые фразы, которые чрезмерно используются в рекламных текстах и не несут дополнительной ценности.
|
2425 |
+
**Не считай клише или канцеляризмами следующие типы выражений:**
|
2426 |
+
- Стандартные призывы к действию (например, "Получите", "Оформите", "Закажите сейчас"), но **не** их комбинации с общими, неопределёнными фразами, как например, "за считанные минуты", "быстро, удобно".
|
2427 |
+
- Информацию о ценах, скидках, акциях или условиях покупки (например, "при покупках от 100 000 рублей в месяц").
|
2428 |
+
- Описания способов оформления или получения услуг (например, "оформление возможно онлайн или в офисе").
|
2429 |
+
- Стандартные отраслевые термины и фразы, необходимые для понимания сообщения (например, "премиальная бизнес-карта", "Mastercard Preffered"), но **не** их использование в комбинации с общими словами, как например, "идеальное решение для вашего бизнеса".
|
2430 |
+
**Считай клише или канцеляризмами следующие типы выражений:**
|
2431 |
+
- Избитые фразы, такие как:
|
2432 |
+
- "Обеспечьте стабильность и развитие вашего бизнеса"
|
2433 |
+
- "Заботьтесь о будущем семьи, сохраняя ресурсы."
|
2434 |
+
- "Получите необходимые средства для развития бизнеса и обеспечения финансовой стабильности!"
|
2435 |
+
- "Ваш успех — наша забота!"
|
2436 |
+
- "Ваш рост — наша цель!"
|
2437 |
+
- "Ваша финансовая стабильность и комфорт — наш приоритет."
|
2438 |
+
- "Быстро и удобно развивайте свой бизнес"
|
2439 |
+
- "Получите необходимые средства для развития бизнеса!"
|
2440 |
+
- "Что может быть проще?"
|
2441 |
+
- "Без лишней волокиты"
|
2442 |
+
- "Быстро, удобно, без лишних хлопот!"
|
2443 |
+
- "За считанные минуты"
|
2444 |
+
- "Это идеальное предложение для вашего бизнеса!"
|
2445 |
+
- "Удобное и надёжное решение для роста вашего капитала."
|
2446 |
+
- "Первый шаг — уже за тобой!"
|
2447 |
+
- "Не упустите свой шанс на развитие!"
|
2448 |
+
- "Не упусти возможность!"
|
2449 |
+
- "Не упусти свой шанс!"
|
2450 |
+
- "Условия просты и прозрачны."
|
2451 |
+
- "Спеши!"
|
2452 |
+
Пример ответа:
|
2453 |
+
{{"decision": false, "explanation": "Текст не содержит клише или канцеляризмов."}}
|
2454 |
+
Если в тексте **нет** таких выражений, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}};
|
2455 |
+
если в тексте **есть** такие выражения, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}}.
|
2456 |
+
**Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
|
2457 |
|
2458 |
+
response = generate_message_gpt4o_mini(prompt)
|
2459 |
+
time.sleep(3)
|
2460 |
+
print("GPT-4o-mini response:", response)
|
2461 |
+
result = parse_json_response(response)
|
2462 |
+
if result is not None:
|
2463 |
+
decision = result.get("decision", False)
|
2464 |
+
explanation = result.get("explanation", "")
|
2465 |
+
print("Explanation:", explanation)
|
2466 |
+
return not decision
|
2467 |
+
else:
|
2468 |
+
return None
|
2469 |
|
|
|
2470 |
|
2471 |
+
# 29. Проверка на соответствие описанию предложения
|
2472 |
+
def check_no_contradictions(message, description):
|
2473 |
+
print()
|
2474 |
+
print("Проверка 29: Проверка на отсутствие противоречий с описанием предложения")
|
2475 |
+
print()
|
2476 |
+
message_clean = cut_message(message)
|
2477 |
+
prompt = f'''Проверь, не противоречит ли следующее сообщение описанию предложения.
|
2478 |
+
Описание предложения:
|
2479 |
+
"{description}"
|
2480 |
+
Сообщение:
|
2481 |
"{message_clean}"
|
2482 |
+
Если сообщение не содержит фактов, которые отсутствуют в описании предложения, **верни только** JSON {{"decision": false, "explanation": "Противоречий не обнаружено."}}.
|
2483 |
+
Если сообщение содержит факты, которые отсутствуют в описании предложения, **верни только** JSON {{"decision": true, "explanation": "<описание противоречий>"}}.
|
2484 |
+
**Не добавляй никакого дополнительного текста. Отвечай только в формате JSON с закрывающими кавычками и скобками.**'''
|
2485 |
|
2486 |
+
response = generate_message_gpt4o_mini(prompt)
|
2487 |
+
time.sleep(3)
|
2488 |
+
print("GPT-4o-mini response:", response)
|
2489 |
+
result = parse_json_response(response)
|
2490 |
+
if result is not None:
|
2491 |
+
decision = result.get("decision", False)
|
2492 |
+
explanation = result.get("explanation", "")
|
2493 |
+
print("Explanation:", explanation)
|
2494 |
+
return not decision # Возвращаем True, если противоречий нет
|
2495 |
+
else:
|
2496 |
+
return None
|
2497 |
|
2498 |
+
# 30. Проверка на наличие ключевого сообще��ия
|
2499 |
+
def check_contains_key_message(message, key_message):
|
2500 |
+
print()
|
2501 |
+
print("Проверка 30: Проверка на наличие ключевого сообщения")
|
2502 |
+
print()
|
2503 |
+
message_clean = cut_message(message)
|
2504 |
+
prompt = f'''Проверь, содержит ли следующее сообщение ключевое сообщение.
|
2505 |
+
Сообщение:
|
2506 |
+
"{message_clean}"
|
2507 |
+
Ключевой текст:
|
2508 |
+
"{key_message}"
|
2509 |
+
Если сообщение **содержит всю** информацию из ключевого текста, **верни только** JSON {{"decision": false, "explanation": "Ключевое текст присутствует."}}.
|
2510 |
+
Если сообщение **не содержит всю** информацию из ключевого текста, **верни только** JSON {{"decision": true, "explanation": "Ключевое текст отсутствует."}}.
|
2511 |
+
**Не добавляй никакого дополнительного текста. Отвечай только в формате JSON с закрывающими кавычками и скобками.**'''
|
2512 |
|
2513 |
+
response = generate_message_gpt4o_mini(prompt)
|
2514 |
+
time.sleep(3)
|
2515 |
+
print("GPT-4o-mini response:", response)
|
2516 |
+
result = parse_json_response(response)
|
2517 |
+
if result is not None:
|
2518 |
+
decision = result.get("decision", False)
|
2519 |
+
explanation = result.get("explanation", "")
|
2520 |
+
print("Explanation:", explanation)
|
2521 |
+
return not decision # Возвращаем True, если ключевое сообщение присутствует
|
2522 |
+
else:
|
2523 |
+
return None
|
2524 |
|
2525 |
+
# 31. Проверка на точное совпадение названий продуктов
|
2526 |
+
def check_product_name_consistency(message, description):
|
2527 |
+
print()
|
2528 |
+
print("Проверка 31: Проверка на точное совпадение названий продуктов")
|
2529 |
+
print()
|
2530 |
+
|
2531 |
+
message_clean = cut_message(message)
|
2532 |
+
|
2533 |
+
prompt = f'''Проверь, полностью ли совпадает название продукта в сообщении с названием продукта в описании предложения.
|
2534 |
+
Не допускай никаких изменений, таких как перестановка слов, добавление или удаление кавычек, изменение порядка слов, пропуск или добавление слов. Название должно совпадать **точно**.
|
2535 |
+
Описание предложения:
|
2536 |
+
"{description}"
|
2537 |
+
Сообщение:
|
2538 |
+
"{message_clean}"
|
2539 |
+
Если название продукта в сообщении **точно** совпадает с названием продукта в описании предложения, **верни только** JSON {{"decision": false, "explanation": "Название продукта полностью совпадает с описанием."}}.
|
2540 |
+
Если название продукта **не** совпадает, **верни только** JSON {{"decision": true, "explanation": "<описание несоответствия>"}}.
|
2541 |
+
**Не добавляй никакого дополнительного текста. Ответ должен быть только в формате JSON с закрывающими кавычками и скобками.**'''
|
2542 |
|
2543 |
+
response = generate_message_gpt4o_mini(prompt)
|
2544 |
time.sleep(3)
|
2545 |
+
print("GPT-4o-mini response:", response)
|
2546 |
result = parse_json_response(response)
|
2547 |
if result is not None:
|
2548 |
decision = result.get("decision", False)
|
2549 |
explanation = result.get("explanation", "")
|
2550 |
print("Explanation:", explanation)
|
2551 |
+
return not decision # Возвращаем True, если совпадение найдено
|
2552 |
else:
|
2553 |
return None
|
2554 |
|
|
|
2562 |
# Optionally, you can log the exception here if needed
|
2563 |
return None # Indicate that the check could not be performed
|
2564 |
|
2565 |
+
def perform_checks(message, description, key_message):
|
2566 |
checks = {
|
2567 |
"forbidden_words": safe_check(check_forbidden_words, message),
|
2568 |
"client_addressing": safe_check(check_no_greeting, message),
|
|
|
2590 |
"abstract_claims": safe_check(check_abstract_claims, message),
|
2591 |
"specialized_terms": safe_check(check_specialized_terms, message),
|
2592 |
"offensive_phrases": safe_check(check_offensive_phrases, message),
|
2593 |
+
"cliches_and_bureaucratese": safe_check(check_cliches_and_bureaucratese, message),
|
2594 |
+
"no_contradictions": safe_check(check_no_contradictions, message, description),
|
2595 |
+
"contains_key_message": safe_check(check_contains_key_message, message, key_message),
|
2596 |
+
"product_name_consistency": safe_check(check_product_name_consistency, message, description)
|
2597 |
}
|
2598 |
return checks
|
2599 |
|
|
|
2626 |
"abstract_claims": "Абстрактные заявления без доказательств",
|
2627 |
"specialized_terms": "Узкоспециализированные термины",
|
2628 |
"offensive_phrases": "Двусмысленные или оскорбительные фразы",
|
2629 |
+
"cliches_and_bureaucratese": "Речевые клише, рекламные штампы, канцеляризмы",
|
2630 |
+
"no_contradictions": "Отсутствие противоречий с описанием предложения",
|
2631 |
+
"contains_key_message": "Наличие ключевого сообщения",
|
2632 |
+
"product_name_consistency": "Совпадение названия продукта с описанием предложения"
|
2633 |
}
|
2634 |
formatted_results = []
|
2635 |
for rule, result in checks.items():
|