From 62f0007b9d35ba3af508a7792e057406fc8c0c4e Mon Sep 17 00:00:00 2001 From: vovanbravin Date: Wed, 26 Nov 2025 12:30:55 +0300 Subject: [PATCH 1/3] 763_references_in_table --- .../report_checks/literature_references.py | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/app/main/checks/report_checks/literature_references.py b/app/main/checks/report_checks/literature_references.py index bcd89792..9ae0d6f7 100644 --- a/app/main/checks/report_checks/literature_references.py +++ b/app/main/checks/report_checks/literature_references.py @@ -87,27 +87,44 @@ def check(self): ''' return answer(False, result_str) + def search_references_in_table(self, index_table: int, prev_ref, array_of_references, ref_sequence) -> int: + """Функция поиска ссылок в таблицах (ищет в каждой клетке)""" + for cell in self.file.file.tables[index_table]._cells: + prev_ref = self.search_references_in_text(cell.text, prev_ref, array_of_references, ref_sequence) + return prev_ref + + def search_references_in_text(self, text: str, prev_ref, array_of_references, ref_sequence) -> int: + """Функция поиска ссылок в переданном тексте""" + reg_exp = r'\[[\^]{0,1}[\d \-,]+\]' + detected_references = re.findall(reg_exp, text) + if detected_references: + for reference_raw in detected_references: + reference = reference_raw.replace('^', '') # TODO: kostyl'... + for one_part in re.split(r'[\[\],]', reference): + if re.match(r'\d+[ \-]+\d+', one_part): + start, end = re.split(r'[ -]+', one_part) + for k in range(int(start), int(end) + 1): + prev_ref = self.add_references(k, prev_ref, array_of_references, ref_sequence) + elif one_part != '': + prev_ref = self.add_references(int(one_part), prev_ref, array_of_references, ref_sequence) + return prev_ref + def search_references(self, start_par): + """Функция поиска ссылок в документе""" prev_ref = 0 ref_sequence = [] array_of_references = set() - reg_exp = r'\[[\^]{0,1}[\d \-,]+\]' # md can use [^5] format for hyperlink for i in range(0, start_par): - if isinstance(self.file.paragraphs[i], str): - detected_references = re.findall(reg_exp, self.file.paragraphs[i]) - else: - detected_references = re.findall(reg_exp, self.file.paragraphs[i].paragraph_text) - - if detected_references: - for reference_raw in detected_references: - reference = reference_raw.replace('^', '') # TODO: kostyl'... - for one_part in re.split(r'[\[\],]', reference): - if re.match(r'\d+[ \-]+\d+', one_part): - start, end = re.split(r'[ -]+', one_part) - for k in range(int(start), int(end) + 1): - prev_ref = self.add_references(k, prev_ref, array_of_references, ref_sequence) - elif one_part != '': - prev_ref = self.add_references(int(one_part), prev_ref, array_of_references, ref_sequence) + text = self.file.paragraphs[i] if isinstance(self.file.paragraphs[i], str) else self.file.paragraphs[i].paragraph_text + match = re.search(r'Таблица ([.\d]+)', text) + if match: + index_table = int(match.group(1)) - 1 + prev_ref = self.search_references_in_table(index_table, prev_ref, array_of_references, ref_sequence) + text = None + + if text is not None: + prev_ref = self.search_references_in_text(text, prev_ref, array_of_references, ref_sequence) + if ref_sequence: if ref_sequence[0][1] == '0': ref_sequence[0] = ref_sequence[0].replace('[0],', '') From 958247c2c8bd85fa37c6f9adc3062cfd5141092e Mon Sep 17 00:00:00 2001 From: vovanbravin Date: Sat, 24 Jan 2026 14:47:46 +0300 Subject: [PATCH 2/3] fix --- .../report_checks/literature_references.py | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/main/checks/report_checks/literature_references.py b/app/main/checks/report_checks/literature_references.py index 9ae0d6f7..1fb0b872 100644 --- a/app/main/checks/report_checks/literature_references.py +++ b/app/main/checks/report_checks/literature_references.py @@ -87,11 +87,13 @@ def check(self): ''' return answer(False, result_str) - def search_references_in_table(self, index_table: int, prev_ref, array_of_references, ref_sequence) -> int: - """Функция поиска ссылок в таблицах (ищет в каждой клетке)""" - for cell in self.file.file.tables[index_table]._cells: - prev_ref = self.search_references_in_text(cell.text, prev_ref, array_of_references, ref_sequence) - return prev_ref + def get_text_in_table(self, index_table: int) -> str: + """Функция получения всего текста из таблицы""" + text = '' + for cell in self.file.tables[index_table]._cells: + if cell.text.strip(): + text += cell.text.strip() + return text def search_references_in_text(self, text: str, prev_ref, array_of_references, ref_sequence) -> int: """Функция поиска ссылок в переданном тексте""" @@ -114,16 +116,19 @@ def search_references(self, start_par): prev_ref = 0 ref_sequence = [] array_of_references = set() + text = '' for i in range(0, start_par): - text = self.file.paragraphs[i] if isinstance(self.file.paragraphs[i], str) else self.file.paragraphs[i].paragraph_text - match = re.search(r'Таблица ([.\d]+)', text) + paragraph_text = self.file.paragraphs[i] if isinstance(self.file.paragraphs[i], str) else self.file.paragraphs[i].paragraph_text + match = re.search(r'Таблица ([.\d]+)', paragraph_text) + table_text = '' if match: index_table = int(match.group(1)) - 1 - prev_ref = self.search_references_in_table(index_table, prev_ref, array_of_references, ref_sequence) - text = None + table_text = self.get_text_in_table(index_table) + + paragraph_text += table_text + text += paragraph_text - if text is not None: - prev_ref = self.search_references_in_text(text, prev_ref, array_of_references, ref_sequence) + prev_ref = self.search_references_in_text(text, prev_ref, array_of_references, ref_sequence) if ref_sequence: if ref_sequence[0][1] == '0': From 6e691f880f89d6e56289b44fd3a603b92e6998d3 Mon Sep 17 00:00:00 2001 From: vovanbravin Date: Sat, 24 Jan 2026 16:01:31 +0300 Subject: [PATCH 3/3] =?UTF-8?q?fix=E2=84=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main/checks/report_checks/literature_references.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/main/checks/report_checks/literature_references.py b/app/main/checks/report_checks/literature_references.py index 1fb0b872..314da840 100644 --- a/app/main/checks/report_checks/literature_references.py +++ b/app/main/checks/report_checks/literature_references.py @@ -116,7 +116,6 @@ def search_references(self, start_par): prev_ref = 0 ref_sequence = [] array_of_references = set() - text = '' for i in range(0, start_par): paragraph_text = self.file.paragraphs[i] if isinstance(self.file.paragraphs[i], str) else self.file.paragraphs[i].paragraph_text match = re.search(r'Таблица ([.\d]+)', paragraph_text) @@ -126,9 +125,7 @@ def search_references(self, start_par): table_text = self.get_text_in_table(index_table) paragraph_text += table_text - text += paragraph_text - - prev_ref = self.search_references_in_text(text, prev_ref, array_of_references, ref_sequence) + prev_ref = self.search_references_in_text(paragraph_text, prev_ref, array_of_references, ref_sequence) if ref_sequence: if ref_sequence[0][1] == '0':