fruitpicker01 commited on
Commit
0b596d6
·
verified ·
1 Parent(s): 15396a9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +67 -27
app.py CHANGED
@@ -558,6 +558,7 @@ final_prompt_2_state = gr.State("")
558
  def generate_personalized_sms_wrapper(selected_product, description, product_name, benefits, key_message,
559
  gender, generation, psychotype, business_stage, industry, opf,
560
  chosen_approach, prompt_1, prompt_2):
 
561
  if "Для формирования промпта выберите хотя бы один личный персональный параметр" in prompt_1 or chosen_approach == "Подход не найден для выбранных параметров.":
562
  gr.Warning("Задайте хотя бы один личный персональный параметр для определения подхода")
563
  return "", "", "", ""
@@ -576,12 +577,12 @@ def generate_personalized_sms_wrapper(selected_product, description, product_nam
576
 
577
  # Выполняем проверки sms_1
578
  cut_sms_1 = cut_message(sms_1)
579
- checks_1 = perform_checks(cut_sms_1, key_message)
580
  checks_formatted_1 = format_checks(checks_1)
581
 
582
  # Выполняем проверки sms_2
583
  cut_sms_2 = cut_message(sms_2)
584
- checks_2 = perform_checks(cut_sms_2, key_message)
585
  checks_formatted_2 = format_checks(checks_2)
586
 
587
  personalization_params = [gender, generation, psychotype, business_stage, industry, opf]
@@ -1107,6 +1108,17 @@ def extract_failed_checks(checks_dict, exceptions_dict, context=""):
1107
  w = match.group(1).lower()
1108
  exceptions_dict.setdefault("derived_prepositions", set()).add(w)
1109
 
 
 
 
 
 
 
 
 
 
 
 
1110
  elif rule_key == "dates_written_out":
1111
  # reason: "Не пройдена проверка на даты прописью: пятнадцатого июля"
1112
  match = re.search(r'даты прописью:\s*(.+)$', reason)
@@ -1601,7 +1613,17 @@ def check_no_derived_prepositions(message, exceptions=None):
1601
 
1602
  # 19. Сложноподчиненные предложения
1603
 
1604
- def check_no_compound_sentences(message):
 
 
 
 
 
 
 
 
 
 
1605
  subordinating_conjunctions = [
1606
  r'\bкогда\b', r'\bкак только\b', r'\bпока\b', r'\bпосле того как\b',
1607
  r'\bпотому что\b', r'\bтак как\b', r'\bоттого что\b', r'\bблагодаря тому что\b',
@@ -1609,11 +1631,19 @@ def check_no_compound_sentences(message):
1609
  r'\bхотя\b', r'\bнесмотря на то что\b', r'\bкак\b', r'\bбудто\b', r'\bсловно\b', r'\bкак будто\b'
1610
  ]
1611
 
1612
- # Убедимся, что слово "как" используется не в вопросе
 
 
1613
  for pattern in subordinating_conjunctions:
1614
- if re.search(pattern, message) and not re.search(r'\?', message):
1615
- print(f"Не пройдена проверка: Сложноподчиненные предложения. Сообщение: {message}")
1616
- return False, f"Не пройдена проверка: Сложноподчиненные предложения: {pattern}"
 
 
 
 
 
 
1617
  return True
1618
 
1619
 
@@ -1714,30 +1744,40 @@ def safe_check(func, message, key_message=None):
1714
  traceback.print_exc() # выведет traceback
1715
  return None
1716
 
1717
- def perform_checks(message, key_message):
 
 
 
 
 
 
 
 
 
 
1718
  checks = {
1719
- "forbidden_words": safe_check(check_forbidden_words, message),
1720
- "client_addressing": safe_check(check_no_greeting, message),
1721
- "promises": safe_check(check_no_promises, message),
1722
- "double_verbs": safe_check(check_no_double_verbs, message),
1723
- "participles": safe_check(check_no_participles, message),
1724
- "adverbial_participles": safe_check(check_no_adverbial_participles, message),
1725
- "superlative_adjectives": safe_check(check_no_superlative_adjectives, message),
1726
- "passive_voice": safe_check(check_no_passive_voice, message),
1727
- "written_out_ordinals": safe_check(check_no_written_out_ordinals, message),
1728
  "subordinate_clauses_chain": safe_check(check_no_subordinate_clauses_chain, message),
1729
- "repeating_conjunctions": safe_check(check_no_repeating_conjunctions, message),
1730
- "introductory_phrases": safe_check(check_no_introductory_phrases, message),
1731
- "amplifiers": safe_check(check_no_amplifiers, message),
1732
- "time_parasites": safe_check(check_no_time_parasites, message),
1733
- "multiple_nouns": safe_check(check_no_multiple_nouns, message),
1734
- "derived_prepositions": safe_check(check_no_derived_prepositions, message),
1735
- "compound_sentences": safe_check(check_no_compound_sentences, message),
1736
- "dates_written_out": safe_check(check_no_dates_written_out, message),
1737
- "no_word_repetitions": safe_check(check_no_word_repetitions, message, key_message),
1738
  }
1739
  return checks
1740
-
1741
  def format_checks(checks):
1742
 
1743
  translation = {
 
558
  def generate_personalized_sms_wrapper(selected_product, description, product_name, benefits, key_message,
559
  gender, generation, psychotype, business_stage, industry, opf,
560
  chosen_approach, prompt_1, prompt_2):
561
+ source_report, exceptions_dict = check_source_fields(description, product_name, benefits, key_message)
562
  if "Для формирования промпта выберите хотя бы один личный персональный параметр" in prompt_1 or chosen_approach == "Подход не найден для выбранных параметров.":
563
  gr.Warning("Задайте хотя бы один личный персональный параметр для определения подхода")
564
  return "", "", "", ""
 
577
 
578
  # Выполняем проверки sms_1
579
  cut_sms_1 = cut_message(sms_1)
580
+ checks_1 = perform_checks(cut_sms_1, key_message, exceptions_dict)
581
  checks_formatted_1 = format_checks(checks_1)
582
 
583
  # Выполняем проверки sms_2
584
  cut_sms_2 = cut_message(sms_2)
585
+ checks_2 = perform_checks(cut_sms_2, key_message, exceptions_dict)
586
  checks_formatted_2 = format_checks(checks_2)
587
 
588
  personalization_params = [gender, generation, psychotype, business_stage, industry, opf]
 
1108
  w = match.group(1).lower()
1109
  exceptions_dict.setdefault("derived_prepositions", set()).add(w)
1110
 
1111
+ elif rule_key == "compound_sentences":
1112
+ # reason может выглядеть так:
1113
+ # "Не пройдена проверка: Сложноподчиненные предложения: как только"
1114
+ # Разделим по двоеточию:
1115
+ splitted = reason.split(': ', 2)
1116
+ # splitted может быть ["Не пройдена проверка", "Сложноподчиненные предложения", "как только"]
1117
+ if len(splitted) == 3:
1118
+ raw_substring = splitted[2].strip()
1119
+ # Добавляем сырую подстроку (без лемматизации) в исключения
1120
+ exceptions_dict["compound_sentences"].add(raw_substring)
1121
+
1122
  elif rule_key == "dates_written_out":
1123
  # reason: "Не пройдена проверка на даты прописью: пятнадцатого июля"
1124
  match = re.search(r'даты прописью:\s*(.+)$', reason)
 
1613
 
1614
  # 19. Сложноподчиненные предложения
1615
 
1616
+ def check_no_compound_sentences(message, exceptions=None):
1617
+ """
1618
+ Проверка на отсутствие сложноподчиненных предложений.
1619
+ Если обнаружен союз/слово, которое есть в exceptions["compound_sentences"],
1620
+ — НЕ считаем ошибкой.
1621
+ Если нет в исключениях, считаем ошибкой.
1622
+ """
1623
+ if exceptions is None:
1624
+ exceptions = {}
1625
+
1626
+ # Список союзов/фраз, по которым мы определяем сложноподчинённость
1627
  subordinating_conjunctions = [
1628
  r'\bкогда\b', r'\bкак только\b', r'\bпока\b', r'\bпосле того как\b',
1629
  r'\bпотому что\b', r'\bтак как\b', r'\bоттого что\b', r'\bблагодаря тому что\b',
 
1631
  r'\bхотя\b', r'\bнесмотря на то что\b', r'\bкак\b', r'\bбудто\b', r'\bсловно\b', r'\bкак будто\b'
1632
  ]
1633
 
1634
+ # Собираем «разрешённые» фразы (из исключений) это сырые строки:
1635
+ allowed_raw_phrases = exceptions.get("compound_sentences", set())
1636
+
1637
  for pattern in subordinating_conjunctions:
1638
+ # Находим все вхождения союз��в
1639
+ matches = re.finditer(pattern, message, re.IGNORECASE)
1640
+ for m in matches:
1641
+ raw_substring = m.group(0) # «сырая» найденная строка
1642
+ # Если substring НЕ в наших исключениях:
1643
+ # (сравниваем без учёта регистра — можно .lower() )
1644
+ if raw_substring.lower() not in (s.lower() for s in allowed_raw_phrases):
1645
+ return (False, f'Не пройдена проверка: Сложноподчиненные предложения: {raw_substring}')
1646
+
1647
  return True
1648
 
1649
 
 
1744
  traceback.print_exc() # выведет traceback
1745
  return None
1746
 
1747
+ def perform_checks(message, key_message, exceptions_dict=None):
1748
+ """
1749
+ Запускает все проверки для данного message.
1750
+ exceptions_dict - словарь исключений:
1751
+ {
1752
+ "compound_sentences": set(...),
1753
+ "double_verbs": set(...),
1754
+ ...
1755
+ }
1756
+ и т.д.
1757
+ """
1758
  checks = {
1759
+ "forbidden_words": safe_check(lambda msg, km: check_forbidden_words(msg, exceptions_dict), message),
1760
+ "client_addressing": safe_check(lambda msg, km: check_no_greeting(msg, exceptions_dict), message),
1761
+ "promises": safe_check(lambda msg, km: check_no_promises(msg, exceptions_dict), message),
1762
+ "double_verbs": safe_check(lambda msg, km: check_no_double_verbs(msg, exceptions_dict), message),
1763
+ "participles": safe_check(lambda msg, km: check_no_participles(msg, exceptions_dict), message),
1764
+ "adverbial_participles": safe_check(lambda msg, km: check_no_adverbial_participles(msg, exceptions_dict), message),
1765
+ "superlative_adjectives": safe_check(lambda msg, km: check_no_superlative_adjectives(msg, exceptions_dict), message),
1766
+ "passive_voice": safe_check(lambda msg, km: check_no_passive_voice(msg, exceptions_dict), message),
1767
+ "written_out_ordinals": safe_check(lambda msg, km: check_no_written_out_ordinals(msg, exceptions_dict), message),
1768
  "subordinate_clauses_chain": safe_check(check_no_subordinate_clauses_chain, message),
1769
+ "repeating_conjunctions": safe_check(lambda msg, km: check_no_repeating_conjunctions(msg, exceptions_dict), message),
1770
+ "introductory_phrases": safe_check(lambda msg, km: check_no_introductory_phrases(msg, exceptions_dict), message),
1771
+ "amplifiers": safe_check(lambda msg, km: check_no_amplifiers(msg, exceptions_dict), message),
1772
+ "time_parasites": safe_check(lambda msg, km: check_no_time_parasites(msg, exceptions_dict), message),
1773
+ "multiple_nouns": safe_check(lambda msg, km: check_no_multiple_nouns(msg, exceptions_dict), message),
1774
+ "derived_prepositions": safe_check(lambda msg, km: check_no_derived_prepositions(msg, exceptions_dict), message),
1775
+ "compound_sentences": safe_check(lambda msg, km: check_no_compound_sentences(msg, exceptions_dict), message),
1776
+ "dates_written_out": safe_check(lambda msg, km: check_no_dates_written_out(msg, exceptions_dict), message),
1777
+ "no_word_repetitions": safe_check(lambda msg, km: check_no_word_repetitions(msg, km, exceptions_dict), message, key_message),
1778
  }
1779
  return checks
1780
+
1781
  def format_checks(checks):
1782
 
1783
  translation = {