fruitpicker01 commited on
Commit
2c16666
·
verified ·
1 Parent(s): 5dd2fb4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +209 -67
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
- morphs = [morph.parse(word)[0] for word in words]
1902
 
1903
- for morph in morphs:
1904
- if 'PRTF' in morph.tag:
 
 
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
- print("JSON не найден в ответе")
2154
- return None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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": true, "explanation": "Текст непонятен, предложения логически не связаны между собой."}}
2183
-
2184
  Если в тексте **есть** сложные предложения без логической связи между частями, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2185
  если таких предложений **нет**, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2186
-
2187
  **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь **только** в формате JSON с закрывающими кавычками и скобками.**'''
2188
 
2189
- response = generate_message_gigachat_plus(prompt)
2190
  time.sleep(3) # Задержка в 3 секунды между запросами
2191
- print("GigaChat-Pro response:", response) # Выводим полный ответ модели
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 = generate_message_gigachat_plus(prompt)
2217
  time.sleep(3)
2218
- print("GigaChat-Pro response:", response)
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": true, "explanation": "Текст не нейтрален и содержит кликбейтные фразы."}}
2245
 
2246
  Если текст содержит кликбейтные фразы, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2247
  если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2248
 
2249
  **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2250
 
2251
- response = generate_message_gigachat_plus(prompt)
2252
  time.sleep(3)
2253
- print("GigaChat-Pro response:", response)
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
- 4. Учитывай, что в рекламных сообщениях допустимы эмоциональные и обобщенные фразы, если они достаточно конкретны для понимания аудитории. Избегай чрезмерно строгих оценок.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2278
 
2279
  Пример ответа:
2280
- {{"decision": true, "explanation": "Текст содержит абстрактные утверждения без конкретики."}}
2281
 
2282
  Если в тексте присутствуют абстрактные или неподкрепленные заявления, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2283
  если таких утверждений нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2284
 
2285
  **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2286
 
2287
- response = generate_message_gigachat_plus(prompt)
2288
  time.sleep(3)
2289
- print("GigaChat-Pro response:", response)
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": true, "explanation": "В тексте присутствуют узкоспециализированные термины."}}
2318
 
2319
  Если в тексте есть такие узкоспециализированные термины, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2320
  если таких терминов нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2321
 
2322
  **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2323
 
2324
- response = generate_message_gigachat_plus(prompt)
2325
  time.sleep(3)
2326
- print("GigaChat-Pro response:", response)
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": true, "explanation": "Текст содержит обидные или двусмысленные фразы."}}
2349
  Если такие фразы есть, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}};
2350
  если таких фраз нет, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}}.
2351
  **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
2352
 
2353
- response = generate_message_gigachat_plus(prompt)
2354
  time.sleep(3)
2355
- print("GigaChat-Pro response:", response)
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
- В контексте рекламных SMS допустимы стандартные фразы и призывы к действию, необходимые для ясности и краткости сообщения, такие как предложения о покупке, описания условий и способов оформления услуг.
2374
-
2375
- **Не считай клише или канцеляризмами следующие типы выражений:**
2376
-
2377
- - Стандартные призывы к действию (например, "Получите", "Оформите", "Закажите сейчас").
2378
-
2379
- - Информацию о ценах, скидках, акциях или условиях покупки (например, "при покупках от 100 000 рублей в месяц").
2380
-
2381
- - Описания способов оформления или получения услуг (например, "оформление возможно онлайн или в офисе").
2382
-
2383
- - Описания выгодных и привлекательных условий сделки или предложения (например, "выгодные условия", "привлекательные условия", "индивидуальные условия", "более выгодные ставки").
2384
-
2385
- - Стандартные отраслевые термины и фразы, необходимые для понимания сообщения (например, "премиальная бизнес-карта", "Mastercard Preffered").
2386
-
2387
- **Считай клише или канцеляризмами выражения, которые:**
2388
-
2389
- - Чрезмерно обобщены и не несут конкретной информации (например, "лучшее решение для вашего бизнеса").
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2390
 
2391
- - Используют излишне формальный или усложненный язык без необходимости (например, "высококачественный спектр услуг").
 
 
 
 
 
 
 
 
 
 
2392
 
2393
- - Являются избитыми фразами, не добавляющими ценности сообщению (например, "мы заботимся о вас", "качество проверенное временем").
2394
 
 
 
 
 
 
 
 
 
 
 
2395
  "{message_clean}"
 
 
 
2396
 
2397
- Пример ответа:
2398
-
2399
- {{"decision": true, "explanation": "Текст содержит клише и канцеляризмы."}}
 
 
 
 
 
 
 
 
2400
 
2401
- Если в тексте **нет** таких выражений, **верни только** JSON {{"decision": false, "explanation": "<пояснение>"}};
 
 
 
 
 
 
 
 
 
 
 
 
 
2402
 
2403
- если в тексте **есть** такие выражения, **верни только** JSON {{"decision": true, "explanation": "<пояснение>"}}.
 
 
 
 
 
 
 
 
 
 
2404
 
2405
- **Не добавляй никакого дополнительного текста. Перед ответом убедись, что отвечаешь только в формате JSON с закрывающими кавычками и скобками.**'''
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2406
 
2407
- response = generate_message_gigachat_plus(prompt)
2408
  time.sleep(3)
2409
- print("GigaChat-Pro response:", response)
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():