Skip to content

Commit 1e3f293

Browse files
added was/were check for reports and presentations
1 parent 191ad03 commit 1e3f293

File tree

5 files changed

+93
-0
lines changed

5 files changed

+93
-0
lines changed

app/main/checks/presentation_checks/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@
1717
from .name_of_image_check import PresImageCaptureCheck
1818
from .task_tracker import TaskTracker
1919
from .overview_in_tasks import OverviewInTasks
20+
from .was_were_check import PresWasWereCheck
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import re
2+
from ..base_check import BasePresCriterion, answer
3+
from app.nlp.is_passive_was_were_sentence import is_passive_was_were_sentece
4+
5+
class PresWasWereCheck(BasePresCriterion):
6+
label = 'Проверка на пассивные конструкции, начинающиеся с Был/Была/Было/Были, которые можно убрать без потери смысла'
7+
description = ''
8+
id = 'pres_was_were_check'
9+
10+
def __init__(self, file_info):
11+
super().__init__(file_info)
12+
13+
def check(self):
14+
detected = {}
15+
for slide_index, slide_text in enumerate(self.file.get_text_from_slides()):
16+
mock_slide_text = "Было проведено исследование. Было бы здорово. Как бы было здорово. Была проделана работа. Были сделаны шаги..."
17+
sentences = re.split(r'(?<=[.!?…])\s+', mock_slide_text)
18+
for sentence_index, sentence in enumerate(sentences):
19+
if is_passive_was_were_sentece(sentence):
20+
if slide_index not in detected:
21+
detected[slide_index] = []
22+
detected[slide_index].append(f'{sentence_index+1}: {sentence}')
23+
if len(detected):
24+
result_str = 'Обнаружены конструкции (Был/Была/Было/Были), которые можно удалить без потери смысла:<br><br>'
25+
for slide_index, messages in detected.items():
26+
result_str += f'Слайд №{slide_index+1}:<br>' + '<br>'.join(messages) + '<br><br>'
27+
result_score = 0
28+
else:
29+
result_str = 'Пройдена!'
30+
result_score = 1
31+
return answer(result_score, result_str)

app/main/checks/report_checks/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,4 @@
3232
from .sw_section_size import SWSectionSizeCheck
3333
from .sw_keywords_check import SWKeywordsCheck
3434
from .task_tracker import ReportTaskTracker
35+
from .was_were_check import ReportWasWereCheck
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import re
2+
from ..base_check import BaseReportCriterion, answer
3+
from app.nlp.is_passive_was_were_sentence import is_passive_was_were_sentece
4+
5+
class ReportWasWereCheck(BaseReportCriterion):
6+
label = 'Проверка на пассивные конструкции, начинающиеся с Был/Была/Было/Были, которые можно убрать без потери смысла'
7+
description = ''
8+
id = 'report_was_were_check'
9+
10+
def __init__(self, file_info):
11+
super().__init__(file_info)
12+
13+
def check(self):
14+
if self.file.page_counter() < 4:
15+
return answer(False, 'В отчёте недостаточно страниц. Нечего проверять.')
16+
detected = {}
17+
for page_index, page_text in self.file.pdf_file.get_text_on_page().items():
18+
sentences = re.split(r'(?<=[.!?…])\s+', page_text)
19+
for sentence_index, sentence in enumerate(sentences):
20+
if is_passive_was_were_sentece(sentence):
21+
if page_index not in detected:
22+
detected[page_index] = []
23+
detected[page_index].append(f'{sentence_index+1}: {sentence}')
24+
if len(detected):
25+
result_str = 'Обнаружены конструкции (Был/Была/Было/Были), которые можно удалить без потери смысла:<br><br>'
26+
for page_index, messages in detected.items():
27+
result_str += f'Страница №{page_index+1}:<br>' + '<br>'.join(messages) + '<br><br>'
28+
print(f'Страница №{page_index+1}:<br>' + '<br>'.join(messages) + '<br><br>')
29+
print()
30+
result_score = 0
31+
else:
32+
result_str = 'Пройдена!'
33+
result_score = 1
34+
return answer(result_score, result_str)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import re
2+
import pymorphy2
3+
import string
4+
5+
morph = pymorphy2.MorphAnalyzer()
6+
7+
def clean_word(word):
8+
punct = string.punctuation.replace('-', '')
9+
return word.translate(str.maketrans('', '', punct))
10+
11+
def is_passive_was_were_sentece(sentence):
12+
first_words = re.split(r'\s+', sentence.strip(), maxsplit=2)
13+
if len(first_words) < 2:
14+
return False
15+
16+
first_word = clean_word(first_words[0])
17+
second_word = clean_word(first_words[1])
18+
19+
parsed = morph.parse(first_word)[0]
20+
if (parsed.normal_form == 'быть' and
21+
'past' in parsed.tag and
22+
parsed.tag.POS == 'VERB'):
23+
second_word_parsed = morph.parse(second_word)[0]
24+
return ('PRTS' in second_word_parsed.tag and
25+
'pssv' in second_word_parsed.tag)
26+
return False

0 commit comments

Comments
 (0)