Skip to content

Commit fe9f649

Browse files
add warned_words for banned_words_check
1 parent 5d82440 commit fe9f649

File tree

2 files changed

+44
-24
lines changed

2 files changed

+44
-24
lines changed

app/main/checks/report_checks/banned_words_check.py

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55

66
class ReportBannedWordsCheck(BaseReportCriterion):
77
label = "Проверка наличия запретных слов в тексте отчёта"
8-
description = 'Запрещено упоминание слова "мы"'
8+
description = 'Запрещено упоминание определенных "опасных" слов'
99
id = 'banned_words_check'
1010

1111
def __init__(self, file_info, headers_map=None):
1212
super().__init__(file_info)
1313
self.words = []
14+
self.warned_words = []
1415
self.min_count = 0
1516
self.max_count = 0
1617
if headers_map:
@@ -21,42 +22,50 @@ def __init__(self, file_info, headers_map=None):
2122
def late_init(self):
2223
self.headers_main = self.file.get_main_headers(self.file_type['report_type'])
2324
if self.headers_main in StyleCheckSettings.CONFIGS.get(self.config):
24-
self.words = [morph.normal_forms(word)[0] for word in StyleCheckSettings.CONFIGS.get(self.config)[self.headers_main]['banned_words']]
25+
self.words = {morph.normal_forms(word)[0] for word in StyleCheckSettings.CONFIGS.get(self.config)[self.headers_main]['banned_words']}
26+
self.warned_words = {morph.normal_forms(word)[0] for word in StyleCheckSettings.CONFIGS.get(self.config)[self.headers_main]['warned_words']}
2527
self.min_count = StyleCheckSettings.CONFIGS.get(self.config)[self.headers_main]['min_count_for_banned_words_check']
2628
self.max_count = StyleCheckSettings.CONFIGS.get(self.config)[self.headers_main]['max_count_for_banned_words_check']
2729
else:
2830
if 'any_header' in StyleCheckSettings.CONFIGS.get(self.config):
29-
self.words = [morph.normal_forms(word)[0] for word in StyleCheckSettings.CONFIGS.get(self.config)['any_header']['banned_words']]
31+
self.words = {morph.normal_forms(word)[0] for word in StyleCheckSettings.CONFIGS.get(self.config)['any_header']['banned_words']}
32+
self.warned_words = {morph.normal_forms(word)[0] for word in StyleCheckSettings.CONFIGS.get(self.config)['any_header']['warned_words']}
3033
self.min_count = StyleCheckSettings.CONFIGS.get(self.config)['any_header']['min_count_for_banned_words_check']
3134
self.max_count = StyleCheckSettings.CONFIGS.get(self.config)['any_header']['max_count_for_banned_words_check']
3235

3336
def check(self):
3437
if self.file.page_counter() < 4:
3538
return answer(False, "В отчете недостаточно страниц. Нечего проверять.")
3639
self.late_init()
37-
detected_lines = {}
3840
result_str = f'<b>Запрещенные слова: {"; ".join(self.words)}</b><br>'
39-
count = 0
41+
banned_counter = {'words': self.words, 'detected_lines': {}, 'count': 0}
42+
warned_counter = {'words': self.warned_words,'detected_lines': {}, 'count': 0}
4043
for k, v in self.file.pdf_file.get_text_on_page().items():
4144
lines_on_page = re.split(r'\n', v)
4245
for index, line in enumerate(lines_on_page):
43-
words_on_line = re.split(r'[^\w-]+', line)
44-
words_on_line = [morph.normal_forms(word)[0] for word in words_on_line]
45-
count_banned_words = set(words_on_line).intersection(self.words)
46-
if count_banned_words:
47-
count += len(count_banned_words)
48-
if k not in detected_lines.keys():
49-
detected_lines[k] = []
50-
detected_lines[k].append(f'Строка {index + 1}: {line} <b>[{"; ".join(count_banned_words)}]</b>')
51-
if len(detected_lines):
46+
words_on_line = {morph.normal_forms(word)[0] for word in re.split(r'[^\w-]+', line)}
47+
for counter in (banned_counter, warned_counter):
48+
count_banned_words = words_on_line.intersection(counter['words'])
49+
if count_banned_words:
50+
counter['count'] += len(count_banned_words)
51+
if k not in counter['detected_lines'].keys():
52+
counter['detected_lines'][k] = []
53+
counter['detected_lines'][k].append(f'Строка {index + 1}: {line} <b>[{"; ".join(count_banned_words)}]</b>')
54+
if len(banned_counter['detected_lines']):
5255
result_str += 'Обнаружены запретные слова! <br><br>'
53-
for k, v in detected_lines.items():
54-
result_str += f'Страница №{k}:<br>{"<br>".join(detected_lines[k])}<br><br>'
56+
for k, v in banned_counter['detected_lines'].items():
57+
result_str += f'Страница №{k}:<br>{"<br>".join(banned_counter['detected_lines'][k])}<br><br>'
5558
else:
5659
result_str = 'Пройдена!'
60+
61+
if len(warned_counter['detected_lines']):
62+
result_str += f'<br><br>Обнаружены потенциально опасные слова (не влияют на результат проверки)!<br>Обратите внимание, что их использование возможно только в подтвержденных случаях: {"; ".join(self.warned_words)}<br><br>'
63+
for k, v in warned_counter['detected_lines'].items():
64+
result_str += f'Страница №{k}:<br>{"<br>".join(warned_counter['detected_lines'][k])}<br><br>'
65+
5766
result_score = 1
58-
if count > self.min_count:
59-
if count <= self.max_count:
67+
if banned_counter['count'] > self.min_count:
68+
if banned_counter['count'] <= self.max_count:
6069
result_score = 0.5
6170
else:
6271
result_score = 0

app/main/checks/report_checks/style_check_settings.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@ class StyleCheckSettings:
1010
HEADER_REGEX = "^\\D+.+$"
1111
HEADER_1_REGEX = "^()([\\w\\s]+)$"
1212
HEADER_2_REGEX = "^()([\\w\\s]+)\\.$"
13-
STD_BANNED_WORDS = ['мы', 'моя', 'мои', 'моё', 'наш', 'наши',
13+
STD_BANNED_WORDS = ('мы', 'моя', 'мои', 'моё', 'наш', 'наши',
1414
'аттач', 'билдить', 'бинарник', 'валидный', 'дебаг', 'деплоить', 'десктопное', 'железо',
1515
'исходники', 'картинка', 'консольное', 'конфиг', 'кусок', 'либа', 'лог', 'мануал',
1616
'отнаследованный', 'парсинг', 'пост', 'распаковать', 'сбоит', 'скачать', 'склонировать', 'скрипт',
1717
'тестить', 'тул', 'тула', 'тулза', 'фиксить', 'флажок', 'флаг', 'юзкейс', 'продакт', 'продакшн',
18-
'прод', 'фидбек', 'дедлайн', 'дэдлайн', 'оптимально', 'оптимальный', 'надежный', 'интуитивный',
18+
'прод', 'фидбек', 'дедлайн', 'дэдлайн', 'оптимально', 'надежный', 'интуитивный',
1919
'хороший', 'плохой', 'идеальный', 'быстро', 'медленно', 'какой-нибудь', 'некоторый', 'почти'
20-
] # TODO: list of "warning" words
20+
)
21+
STD_WARNED_WORDS = ('машина', 'оптимальный') # TODO: list of "warning" words
2122
STD_MIN_LIT_REF = 1
2223
STD_MAX_LIT_REF = 1000 #just in case for future edit
2324
HEADER_1_STYLE = {
@@ -101,6 +102,7 @@ class StyleCheckSettings:
101102
"unify_regex": APPENDIX_UNIFY_REGEX,
102103
"regex": APPENDIX_REGEX,
103104
"banned_words": STD_BANNED_WORDS,
105+
"warned_words": STD_WARNED_WORDS,
104106
'min_count_for_banned_words_check': 3,
105107
'max_count_for_banned_words_check': 6,
106108
'min_ref_for_literature_references_check': STD_MIN_LIT_REF,
@@ -125,6 +127,7 @@ class StyleCheckSettings:
125127
"unify_regex": None,
126128
"regex": HEADER_REGEX,
127129
"banned_words": STD_BANNED_WORDS,
130+
"warned_words": STD_WARNED_WORDS,
128131
'min_count_for_banned_words_check': 3,
129132
'max_count_for_banned_words_check': 6,
130133
'min_ref_for_literature_references_check': STD_MIN_LIT_REF,
@@ -149,7 +152,8 @@ class StyleCheckSettings:
149152
"ПЛАН РАБОТЫ НА ВЕСЕННИЙ СЕМЕСТР", "ОТЗЫВ РУКОВОДИТЕЛЯ", "СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ"],
150153
"unify_regex": None,
151154
"regex": HEADER_REGEX,
152-
"banned_words": STD_BANNED_WORDS + ['доработать', 'доработка', 'переписать', 'рефакторинг', 'исправление']
155+
"banned_words": STD_BANNED_WORDS + ('доработать', 'доработка', 'переписать', 'рефакторинг', 'исправление'),
156+
"warned_words": STD_WARNED_WORDS
153157
},
154158
}
155159

@@ -162,7 +166,8 @@ class StyleCheckSettings:
162166
"ПЛАН РАБОТЫ НА ОСЕННИЙ СЕМЕСТР", "СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ"],
163167
"unify_regex": None,
164168
"regex": HEADER_REGEX,
165-
"banned_words": STD_BANNED_WORDS + ['доработать', 'доработка', 'переписать', 'рефакторинг', 'исправление']
169+
"banned_words": STD_BANNED_WORDS + ('доработать', 'доработка', 'переписать', 'рефакторинг', 'исправление'),
170+
"warned_words": STD_WARNED_WORDS
166171
},
167172
}
168173

@@ -175,7 +180,8 @@ class StyleCheckSettings:
175180
"ПЛАН РАБОТЫ НА ВЕСЕННИЙ СЕМЕСТР", "ОТЗЫВ РУКОВОДИТЕЛЯ", "СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ"],
176181
"unify_regex": None,
177182
"regex": HEADER_REGEX,
178-
"banned_words": STD_BANNED_WORDS + ['доработать', 'доработка', 'переписать', 'рефакторинг', 'исправление']
183+
"banned_words": STD_BANNED_WORDS + ('доработать', 'доработка', 'переписать', 'рефакторинг', 'исправление'),
184+
"warned_words": STD_WARNED_WORDS
179185
},
180186
}
181187

@@ -193,6 +199,7 @@ class StyleCheckSettings:
193199
"unify_regex": None,
194200
"regex": HEADER_REGEX,
195201
"banned_words": STD_BANNED_WORDS,
202+
"warned_words": STD_WARNED_WORDS,
196203
'min_count_for_banned_words_check': 3,
197204
'max_count_for_banned_words_check': 6,
198205
},
@@ -208,6 +215,7 @@ class StyleCheckSettings:
208215
"unify_regex": None,
209216
"regex": HEADER_REGEX,
210217
"banned_words": STD_BANNED_WORDS,
218+
"warned_words": STD_WARNED_WORDS,
211219
'min_count_for_banned_words_check': 3,
212220
'max_count_for_banned_words_check': 6,
213221
}
@@ -230,6 +238,7 @@ class StyleCheckSettings:
230238
"unify_regex": None,
231239
"regex": HEADER_REGEX,
232240
"banned_words": STD_BANNED_WORDS,
241+
"warned_words": STD_WARNED_WORDS,
233242
'min_ref_for_literature_references_check': 1,
234243
'mах_ref_for_literature_references_check': 1000, #just for future possible edit
235244
'min_count_for_banned_words_check': 2,
@@ -249,6 +258,7 @@ class StyleCheckSettings:
249258
"unify_regex": None,
250259
"regex": HEADER_REGEX,
251260
"banned_words": STD_BANNED_WORDS,
261+
"warned_words": STD_WARNED_WORDS,
252262
'min_ref_for_literature_references_check': 3,
253263
'mах_ref_for_literature_references_check': 1000, #just for future possible edit
254264
'min_count_for_banned_words_check': 2,
@@ -268,6 +278,7 @@ class StyleCheckSettings:
268278
"unify_regex": None,
269279
"regex": HEADER_REGEX,
270280
"banned_words": STD_BANNED_WORDS,
281+
"warned_words": STD_WARNED_WORDS,
271282
'min_ref_for_literature_references_check': 5,
272283
'mах_ref_for_literature_references_check': 1000, #just for future possible edit
273284
'min_count_for_banned_words_check': 2,

0 commit comments

Comments
 (0)