fruitpicker01 commited on
Commit
15396a9
·
verified ·
1 Parent(s): 3bd810e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +149 -6
app.py CHANGED
@@ -968,8 +968,14 @@ def on_check_source_fields(description, product_name, benefits, key_message):
968
  return check_source_fields(description, product_name, benefits, key_message)
969
 
970
 
971
- def extract_failed_checks(checks_dict):
972
-
 
 
 
 
 
 
973
  morph = pymorphy3.MorphAnalyzer()
974
 
975
  lines = []
@@ -980,15 +986,152 @@ def extract_failed_checks(checks_dict):
980
  return (p1, p2)
981
 
982
  for rule_key, result in checks_dict.items():
983
- # Определяем, было ли нарушение
984
  if isinstance(result, tuple):
985
  passed, reason = result
986
- if not passed: # passed == False
987
- # например: "Запрещенные слова: успех"
988
  lines.append(f"{rule_to_str(rule_key)}: {reason}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
989
  elif result is False:
990
- # Если функция вернула просто False без пояснения
991
  lines.append(f"{rule_to_str(rule_key)}: (без пояснения)")
 
992
  return "\n".join(lines)
993
 
994
 
 
968
  return check_source_fields(description, product_name, benefits, key_message)
969
 
970
 
971
+ def extract_failed_checks(checks_dict, exceptions_dict, context=""):
972
+ """
973
+ Пробегаемся по результатам checks_dict.
974
+ Если есть (False, reason), выводим reason,
975
+ и при необходимости парсим reason, чтобы добавить исключения в exceptions_dict.
976
+ """
977
+ import re
978
+ import pymorphy3
979
  morph = pymorphy3.MorphAnalyzer()
980
 
981
  lines = []
 
986
  return (p1, p2)
987
 
988
  for rule_key, result in checks_dict.items():
 
989
  if isinstance(result, tuple):
990
  passed, reason = result
991
+ if not passed:
 
992
  lines.append(f"{rule_to_str(rule_key)}: {reason}")
993
+ # Пример: если rule_key == "double_verbs"
994
+ if rule_key == "double_verbs":
995
+ # Ищем "...: 2 глагола подряд: позволяет зачислять"
996
+ # Допустим reason = "Не пройдена проверка на 2 глагола подряд: позволяет зачислять"
997
+ match = re.search(r'2 глагола подряд:\s*(\S+)\s+(\S+)$', reason)
998
+ if match:
999
+ w1 = match.group(1)
1000
+ w2 = match.group(2)
1001
+ pair_lemma = lemma_pair(w1, w2)
1002
+ exceptions_dict.setdefault("double_verbs", set()).add(pair_lemma)
1003
+
1004
+ elif rule_key == "forbidden_words":
1005
+ # reason вроде: "Запрещенное слово: продукт"
1006
+ match = re.search(r'Запрещенное слово:\s*(\S+)', reason)
1007
+ if match:
1008
+ w = match.group(1)
1009
+ l, _ = lemmatize_word(w, morph)
1010
+ exceptions_dict.setdefault("forbidden_words", set()).add(l)
1011
+
1012
+ elif rule_key == "client_addressing":
1013
+ # reason вроде: "Есть приветствие: дорогая"
1014
+ match = re.search(r'приветствие:\s*(\S+)', reason, re.IGNORECASE)
1015
+ if match:
1016
+ w = match.group(1)
1017
+ l, _ = lemmatize_word(w, morph)
1018
+ exceptions_dict.setdefault("greetings", set()).add(l)
1019
+
1020
+ elif rule_key == "promises":
1021
+ # reason напр. "Не пройдена проверка: обещания => обещать"
1022
+ match = re.search(r'=>\s*(\S+)$', reason)
1023
+ if match:
1024
+ patt = match.group(1)
1025
+ exceptions_dict.setdefault("promises", set()).add(patt)
1026
+
1027
+ elif rule_key == "participles":
1028
+ # reason "Не пройдена проверка на причастие: повышающий"
1029
+ match = re.search(r'причастие:\s*(\S+)$', reason)
1030
+ if match:
1031
+ w = match.group(1)
1032
+ l, _ = lemmatize_word(w, morph)
1033
+ exceptions_dict.setdefault("participles", set()).add(l)
1034
+
1035
+ elif rule_key == "adverbial_participles":
1036
+ # reason: "деепричастие => рассматривая"
1037
+ match = re.search(r'деепричастие\s*=>\s*(\S+)$', reason)
1038
+ if match:
1039
+ w = match.group(1)
1040
+ l, _ = lemmatize_word(w, morph)
1041
+ exceptions_dict.setdefault("adverbial_participles", set()).add(l)
1042
+
1043
+ elif rule_key == "superlative_adjectives":
1044
+ # reason: "Не пройдена проверка на превосходную степень: сильнейший"
1045
+ match = re.search(r'превосходную степень:\s*(\S+)$', reason)
1046
+ if match:
1047
+ w = match.group(1)
1048
+ l, _ = lemmatize_word(w, morph)
1049
+ exceptions_dict.setdefault("superlative_adjectives", set()).add(l)
1050
+
1051
+ elif rule_key == "passive_voice":
1052
+ # reason: "Страдательный залог: построен"
1053
+ match = re.search(r'страдательный залог:\s*(\S+)$', reason)
1054
+ if match:
1055
+ w = match.group(1)
1056
+ l, _ = lemmatize_word(w, morph)
1057
+ exceptions_dict.setdefault("passive_voice", set()).add(l)
1058
+
1059
+ elif rule_key == "written_out_ordinals":
1060
+ # reason: "Порядковые числительные: десятый"
1061
+ match = re.search(r'порядковые числительные:\s*(\S+)$', reason)
1062
+ if match:
1063
+ w = match.group(1)
1064
+ exceptions_dict.setdefault("written_out_ordinals", set()).add(w)
1065
+
1066
+ elif rule_key == "repeating_conjunctions":
1067
+ # reason: "Повторяющиеся союзы: ...",
1068
+ match = re.search(r'союзы:\s*(\S+)', reason)
1069
+
1070
+ elif rule_key == "introductory_phrases":
1071
+ match = re.search(r'конструкции:\s*(\S+)$', reason)
1072
+ if match:
1073
+ phrase = match.group(1).lower()
1074
+ exceptions_dict.setdefault("introductory_phrases", set()).add(phrase)
1075
+
1076
+ elif rule_key == "amplifiers":
1077
+ # reason: "Не пройдена проверка на усилители: очень"
1078
+ match = re.search(r'усилители:\s*(\S+)$', reason)
1079
+ if match:
1080
+ w = match.group(1)
1081
+ l, _ = lemmatize_word(w, morph)
1082
+ exceptions_dict.setdefault("amplifiers", set()).add(l)
1083
+
1084
+ elif rule_key == "time_parasites":
1085
+ # reason: "Не пройдена проверка на паразитов времени: срочно"
1086
+ match = re.search(r'времени:\s*(\S+)$', reason)
1087
+ if match:
1088
+ w = match.group(1)
1089
+ l, _ = lemmatize_word(w, morph)
1090
+ exceptions_dict.setdefault("time_parasites", set()).add(l)
1091
+
1092
+ elif rule_key == "multiple_nouns":
1093
+ # reason: "Несколько существительных подряд: ('зачисление','зарплата','сотрудникам')"
1094
+ match = re.search(r'подряд:\s*(\([^)]+\))', reason)
1095
+ if match:
1096
+ chain_str = match.group(1) # "('зачисление','зарплата','сотрудникам')"
1097
+ try:
1098
+ chain_tuple = eval(chain_str)
1099
+ exceptions_dict.setdefault("multiple_nouns", set()).add(chain_tuple)
1100
+ except:
1101
+ pass
1102
+
1103
+ elif rule_key == "derived_prepositions":
1104
+ # reason: "Не пройдена проверка на производные предлоги: благодаря"
1105
+ match = re.search(r'предлоги:\s*(\S+)$', reason)
1106
+ if match:
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)
1113
+ if match:
1114
+ full = match.group(1).strip()
1115
+ splitted = full.split()
1116
+ if len(splitted) == 2:
1117
+ ord_str, month_str = splitted
1118
+ l_o, _ = lemmatize_word(ord_str, morph)
1119
+ l_m, _ = lemmatize_word(month_str, morph)
1120
+ pair = (l_o, l_m)
1121
+ exceptions_dict.setdefault("dates_written_out", set()).add(pair)
1122
+
1123
+ elif rule_key == "no_word_repetitions":
1124
+ # reason: "Не пройдена проверка на повторы слов: зачисление"
1125
+ match = re.search(r'повторы слов:\s*(\S+)', reason, re.IGNORECASE)
1126
+ if match:
1127
+ rep_w = match.group(1)
1128
+ l, _ = lemmatize_word(rep_w, morph)
1129
+ exceptions_dict.setdefault("word_repetitions", set()).add(l)
1130
+
1131
  elif result is False:
1132
+ # Нет причины
1133
  lines.append(f"{rule_to_str(rule_key)}: (без пояснения)")
1134
+
1135
  return "\n".join(lines)
1136
 
1137