Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions app/main/checks/report_checks/literature_references.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def __init__(self, file_info, min_ref=1, max_ref=1000, headers_map=None):
super().__init__(file_info)
self.headers = []
self.literature_header = None
self.literature_reference_text = []
self.name_pattern = r'список[ \t]*(использованных|использованной|)[ \t]*(источников|литературы)'
if headers_map:
self.config = headers_map
Expand Down Expand Up @@ -55,6 +56,10 @@ def check(self):
if not number_of_sources:
return answer(False,
f'В Списке использованных источников не найдено ни одного источника.<br><br>Проверьте корректность использования нумированного списка.')

if not self.checking_duplicate_sources():
return answer(False, 'В списке используемых источников есть дублирующиеся источники.')

Comment on lines +59 to +62
Copy link
Collaborator

@HadronCollider HadronCollider Dec 7, 2025

Choose a reason for hiding this comment

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

Фидбек критерия должен быть составным:

  1. фидбек по основной проверке (та, что уже есть)
  2. фидбек по дубликатам
    • должен содержать подробности: какие источники дублируются (их номера и формулировки)
  • Если по проверке 2) всё ок, балл за критерий = балл за первую проверку
  • Если по проверка 2) не ок - балл за критерий 0

references, ref_sequence = self.search_references(start_literature_par)
all_numbers = set(range(1, number_of_sources + 1))
if len(references.symmetric_difference(all_numbers)) == 0:
Expand Down Expand Up @@ -124,6 +129,12 @@ def add_references(self, k, prev_ref, array_of_references, ref_sequence):
array_of_references.add(k)
return prev_ref

def checking_duplicate_sources(self):
for source in self.literature_reference_text:
if self.literature_reference_text.count(source) >= 2:
return False
return True

Comment on lines +132 to +137
Copy link
Collaborator

Choose a reason for hiding this comment

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

Подобной проверки недостаточно

  • для пользователя / фидбека нужно подробное описание дубликатов (их номера и формулировки)
  • сделайте проверку регистронезависимой
  • для подсчета кол-ва пригодится from collections import Counter - это эффективнее, чем dict+for+count

def find_start_paragraph(self):
start_index = 0
for i in range(len(self.file.paragraphs)):
Expand All @@ -142,6 +153,7 @@ def count_sources_vkr(self, header):
break
# if re.search(f"дата обращения", child["text"].lower()):
literature_counter += 1
self.literature_reference_text.append(child["text"])
return literature_counter

def count_sources(self):
Expand All @@ -165,6 +177,7 @@ def count_sources(self):
for ind in range(first_string + 1, last_string):
if re.match(f"{literature_counter + 1}.", one_page[ind]):
literature_counter += 1
self.literature_reference_text.append(one_page[ind])
return literature_counter

def search_literature_start_pdf(self):
Expand Down