Skip to content

Conversation

@baydakov-georgiy
Copy link
Collaborator

Задача #750

Добавлен критерий для отчётов и презентаций. Критерий проверяет предложения в начале которых стоят избыточные по смыслу глаголы Был/Была/Были/Было.

detected[page_index] = []
detected[page_index].append(f'{sentence_index+1}: {sentence}')
if len(detected):
result_str = 'Обнаружены конструкции (Был/Была/Было/Были), которые можно удалить без потери смысла:<br><br>'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот эта строчка повторяется и в критерии для слайдов. Ее необходимо вынести в константу в app/nlp/is_passive_was_were_sentence.py и импортировать в обоих критериях

if self.file.page_counter() < 4:
return answer(False, 'В отчёте недостаточно страниц. Нечего проверять.')
detected = {}
for page_index, page_text in self.file.pdf_file.get_text_on_page().items():
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как будто бы сама обработка для слайдов и отчетов отличается по существу только контейнерами (мы достаем из слайдов или из страниц предложения), а также сообщением для детализации (или

Страница №{page_index+1}:<br>' + '<br>'.join(messages) + '<br><br>

или

'Слайд №{slide_index+1}:<br>' + '<br>'.join(messages) + '<br><br>'

Предлагаю максимум общей логики вынести в отдельную функцию в app/nlp/is_passive_was_were_sentence.py, указать ей параметрами информацию об источнике (слайды или страницы - для итогового сообщения) и поправить два критерия так, чтобы в них дублирующаяся логика заменилась на вызов этой функции

import pymorphy2
import string

morph = pymorphy2.MorphAnalyzer()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавьте в данном файле в виде комментария примеры хороших и плохих предложений, которые начинаются с Был*

Comment on lines 15 to 22
for slide_index, slide_text in enumerate(self.file.get_text_from_slides()):
mock_slide_text = "Было проведено исследование. Было бы здорово. Как бы было здорово. Была проделана работа. Были сделаны шаги..."
sentences = re.split(r'(?<=[.!?…])\s+', mock_slide_text)
for sentence_index, sentence in enumerate(sentences):
if is_passive_was_were_sentece(sentence):
if slide_index not in detected:
detected[slide_index] = []
detected[slide_index].append(f'{sentence_index+1}: {sentence}')
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Проверяется не текст слайда, а содержимое mock_slide_text

Comment on lines 15 to 22
for slide_index, slide_text in enumerate(self.file.get_text_from_slides()):
mock_slide_text = "Было проведено исследование. Было бы здорово. Как бы было здорово. Была проделана работа. Были сделаны шаги..."
sentences = re.split(r'(?<=[.!?…])\s+', mock_slide_text)
for sentence_index, sentence in enumerate(sentences):
if is_passive_was_were_sentece(sentence):
if slide_index not in detected:
detected[slide_index] = []
detected[slide_index].append(f'{sentence_index+1}: {sentence}')
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предложения (и в слайдах, и тем более в отчетах) могут быть достаточно большими - ограничьте длину выводимой части sentence (например до 30 символов)

Comment on lines 23 to 30
if len(detected):
result_str = 'Обнаружены конструкции (Был/Была/Было/Были), которые можно удалить без потери смысла:<br><br>'
for slide_index, messages in detected.items():
result_str += f'Слайд №{slide_index+1}:<br>' + '<br>'.join(messages) + '<br><br>'
result_score = 0
else:
result_str = 'Пройдена!'
result_score = 1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Введите логику с порогами оценивания (и для слайдов, и для отчетов): если количество обнаруженных предложений больше N -> 0 баллов, иначе 1

  • N задается аргументом для конструктора, пригодится значение по умолчанию

Copy link
Collaborator

@HadronCollider HadronCollider left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пока проверил только на отчетах - для презентаций вероятно похожие комментарии:

image
  • находятся не все вхождения (threshold=0)
image

@github-actions github-actions bot added the has conflicts if new merge has conflicts label Nov 10, 2025
@github-actions github-actions bot removed the has conflicts if new merge has conflicts label Nov 10, 2025
@baydakov-georgiy
Copy link
Collaborator Author

baydakov-georgiy commented Nov 15, 2025

Доработал для отчётов и презентаций:

  • добавил использование ссылок на страницы в фидбеке
  • исправил нумерацию страниц и строк
  • исправил поиск не всех вхождений

Ошибка была в том, что строки разбивались по знакам препинания, из-за чего в ситуации:

Пример основного текста
Был сделан отчёт.

Предложение воспринималось программой как одно, а не как два разных и так как поиск Был/была/были/было происходит только в начале предложения, программа не помечала его.

Теперь же, поиск происходит построчно, а уже потом каждая строка разбивается на предложения.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Критерий для отчетов и презентаций - слово "Было / был / были" в начале предложения

4 participants