MrSimple07 commited on
Commit
74a8708
·
1 Parent(s): 4a00593

added table data + image data, + replaces with the old version for the table processing

Browse files
Files changed (27) hide show
  1. app.py +2 -1
  2. documents_prep.py +83 -36
  3. utils.py +0 -4
  4. Табличные данные_JSON/ГОСТ Р 50.01.01-2017.json +3 -0
  5. Табличные данные_JSON/ГОСТ Р 50.03.01-2017.json +3 -0
  6. Табличные данные_JSON/ГОСТ Р 50.04.02-2018.json +3 -0
  7. Табличные данные_JSON/ГОСТ Р 50.04.04-2018.json +3 -0
  8. Табличные данные_JSON/ГОСТ Р 50.04.06-2018.json +3 -0
  9. Табличные данные_JSON/ГОСТ Р 50.04.07-2022.json +3 -0
  10. Табличные данные_JSON/ГОСТ Р 50.04.08-2019.json +3 -0
  11. Табличные данные_JSON/ГОСТ Р 50.05.01-2018.json +3 -0
  12. Табличные данные_JSON/ГОСТ Р 50.05.07-2019.json +3 -0
  13. Табличные данные_JSON/ГОСТ Р 50.05.17-2019.json +3 -0
  14. Табличные данные_JSON/ГОСТ Р 50.05.18-2019.json +3 -0
  15. Табличные данные_JSON/ГОСТ Р 50.05.22-2020.json +3 -0
  16. Табличные данные_JSON/ГОСТ Р 50.05.23-2020.json +3 -0
  17. Табличные данные_JSON/ГОСТ Р 50.05.24-2020.json +3 -0
  18. Табличные данные_JSON/ГОСТ Р 50.05.25-2020.json +3 -0
  19. Табличные данные_JSON/ГОСТ Р 50.06.01-2017.json +3 -0
  20. Табличные данные_JSON/ГОСТ Р 50.08.01-2023.json +3 -0
  21. Табличные данные_JSON/ГОСТ Р 50.08.04-2022.json +3 -0
  22. Табличные данные_JSON/МУ 1.1.4.01.1422-2019.json +3 -0
  23. Табличные данные_JSON/МУ 1.2.3.07.0057-2018.json +3 -0
  24. Табличные данные_JSON/НП-068-05.json +3 -0
  25. Табличные данные_JSON/НП-089-15.json +3 -0
  26. Табличные данные_JSON/НП-104-18_ГОСТ 59023.json +3 -0
  27. Табличные данные_JSON/НП-105-18.json +3 -0
app.py CHANGED
@@ -58,7 +58,7 @@ def initialize_system(repo_id, hf_token, download_dir, chunks_filename=None,
58
  log_message(f"Configured chunk size: {CHUNK_SIZE}")
59
  log_message(f"Configured chunk overlap: {CHUNK_OVERLAP}")
60
  log_message(f"Settings text splitter chunk size: {Settings.text_splitter.chunk_size if hasattr(Settings, 'text_splitter') else 'Not set'}")
61
-
62
  all_documents = []
63
  chunks_df = None
64
  chunk_info = []
@@ -182,6 +182,7 @@ def create_demo_interface(answer_question_func, switch_model_func, current_model
182
  "Какой стандарт устанавливает порядок признания протоколов испытаний продукции в области использования атомной энергии?",
183
  "Кто несет ответственность за организацию и проведение признания протоколов испытаний продукции?",
184
  "В каких случаях могут быть признаны протоколы испытаний, проведенные лабораториями?",
 
185
  ],
186
  inputs=question_input
187
  )
 
58
  log_message(f"Configured chunk size: {CHUNK_SIZE}")
59
  log_message(f"Configured chunk overlap: {CHUNK_OVERLAP}")
60
  log_message(f"Settings text splitter chunk size: {Settings.text_splitter.chunk_size if hasattr(Settings, 'text_splitter') else 'Not set'}")
61
+
62
  all_documents = []
63
  chunks_df = None
64
  chunk_info = []
 
182
  "Какой стандарт устанавливает порядок признания протоколов испытаний продукции в области использования атомной энергии?",
183
  "Кто несет ответственность за организацию и проведение признания протоколов испытаний продукции?",
184
  "В каких случаях могут быть признаны протоколы испытаний, проведенные лабораториями?",
185
+ "В какой таблице можно найти информацию о методы исследований при аттестационных испытаниях технологии термической обработки заготовок из легированных сталей? Какой документ и какой раздел?"
186
  ],
187
  inputs=question_input
188
  )
documents_prep.py CHANGED
@@ -13,7 +13,7 @@ def chunk_document(doc, chunk_size=None, chunk_overlap=None):
13
  chunk_size = CHUNK_SIZE
14
  if chunk_overlap is None:
15
  chunk_overlap = CHUNK_OVERLAP
16
-
17
  text_splitter = SentenceSplitter(
18
  chunk_size=chunk_size,
19
  chunk_overlap=chunk_overlap,
@@ -44,29 +44,80 @@ def chunk_document(doc, chunk_size=None, chunk_overlap=None):
44
  def process_documents_with_chunking(documents):
45
  all_chunked_docs = []
46
  chunk_info = []
 
 
 
 
 
47
 
48
  for doc in documents:
49
- if len(doc.text) > CHUNK_SIZE:
50
- chunked_docs = chunk_document(doc)
51
- all_chunked_docs.extend(chunked_docs)
 
 
 
 
52
 
53
- for i, chunk_doc in enumerate(chunked_docs):
54
- chunk_info.append({
55
- 'document_id': chunk_doc.metadata.get('document_id', 'unknown'),
56
- 'section_id': chunk_doc.metadata.get('section_id', 'unknown'),
57
- 'chunk_id': i,
58
- 'chunk_size': len(chunk_doc.text),
59
- 'chunk_preview': chunk_doc.text[:200] + "..." if len(chunk_doc.text) > 200 else chunk_doc.text
60
- })
61
- else:
62
  all_chunked_docs.append(doc)
63
  chunk_info.append({
64
  'document_id': doc.metadata.get('document_id', 'unknown'),
65
  'section_id': doc.metadata.get('section_id', 'unknown'),
66
  'chunk_id': 0,
67
  'chunk_size': len(doc.text),
68
- 'chunk_preview': doc.text[:200] + "..." if len(doc.text) > 200 else doc.text
 
69
  })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
  return all_chunked_docs, chunk_info
72
 
@@ -299,33 +350,29 @@ def table_to_document(table_data, document_id=None):
299
  table_title = table_data.get('table_title', 'Неизвестно')
300
  section = table_data.get('section', 'Не��звестно')
301
 
302
- # Создаем заголовочный контент
303
  header_content = f"Таблица: {table_num}\nНазвание: {table_title}\nДокумент: {doc_id}\nРаздел: {section}\n"
304
 
305
  if 'data' in table_data and isinstance(table_data['data'], list):
306
- # Каждая строка таблицы - отдельный документ
307
  for row_idx, row in enumerate(table_data['data']):
308
  if isinstance(row, dict):
309
  row_text = " | ".join([f"{k}: {v}" for k, v in row.items()])
310
- content = header_content + f"Строка {row_idx + 1}: {row_text}"
311
-
312
- doc = Document(
313
- text=content,
314
- metadata={
315
- "type": "table_row",
316
- "table_number": table_num,
317
- "table_title": table_title,
318
- "document_id": doc_id,
319
- "section": section,
320
- "section_id": section,
321
- "row_number": row_idx + 1,
322
- "total_rows": len(table_data['data'])
323
- }
324
- )
325
- documents.append(doc)
326
-
327
- # Если нет строк, создаем общий документ таблицы
328
- if not documents:
329
  doc = Document(
330
  text=header_content,
331
  metadata={
@@ -339,7 +386,7 @@ def table_to_document(table_data, document_id=None):
339
  )
340
  documents.append(doc)
341
 
342
- return documents # Возвращаем список документов
343
 
344
  def load_table_data(repo_id, hf_token, table_data_dir):
345
  log_message("Начинаю загрузку табличных данных")
 
13
  chunk_size = CHUNK_SIZE
14
  if chunk_overlap is None:
15
  chunk_overlap = CHUNK_OVERLAP
16
+
17
  text_splitter = SentenceSplitter(
18
  chunk_size=chunk_size,
19
  chunk_overlap=chunk_overlap,
 
44
  def process_documents_with_chunking(documents):
45
  all_chunked_docs = []
46
  chunk_info = []
47
+ table_count = 0
48
+ image_count = 0
49
+ text_chunks_count = 0
50
+ large_tables_count = 0
51
+ large_images_count = 0
52
 
53
  for doc in documents:
54
+ doc_type = doc.metadata.get('type', 'text')
55
+
56
+ if doc_type == 'table':
57
+ table_count += 1
58
+ if len(doc.text) > CHUNK_SIZE:
59
+ large_tables_count += 1
60
+ log_message(f"Large table found: {doc.metadata.get('table_number', 'unknown')} in document {doc.metadata.get('document_id', 'unknown')}, size: {len(doc.text)} characters")
61
 
 
 
 
 
 
 
 
 
 
62
  all_chunked_docs.append(doc)
63
  chunk_info.append({
64
  'document_id': doc.metadata.get('document_id', 'unknown'),
65
  'section_id': doc.metadata.get('section_id', 'unknown'),
66
  'chunk_id': 0,
67
  'chunk_size': len(doc.text),
68
+ 'chunk_preview': doc.text[:200] + "..." if len(doc.text) > 200 else doc.text,
69
+ 'type': 'table'
70
  })
71
+
72
+ elif doc_type == 'image':
73
+ image_count += 1
74
+ if len(doc.text) > CHUNK_SIZE:
75
+ large_images_count += 1
76
+ log_message(f"Large image description found: {doc.metadata.get('image_number', 'unknown')} in document {doc.metadata.get('document_id', 'unknown')}, size: {len(doc.text)} characters")
77
+
78
+ all_chunked_docs.append(doc)
79
+ chunk_info.append({
80
+ 'document_id': doc.metadata.get('document_id', 'unknown'),
81
+ 'section_id': doc.metadata.get('section_id', 'unknown'),
82
+ 'chunk_id': 0,
83
+ 'chunk_size': len(doc.text),
84
+ 'chunk_preview': doc.text[:200] + "..." if len(doc.text) > 200 else doc.text,
85
+ 'type': 'image'
86
+ })
87
+
88
+ else:
89
+ if len(doc.text) > CHUNK_SIZE:
90
+ chunked_docs = chunk_document(doc)
91
+ all_chunked_docs.extend(chunked_docs)
92
+ text_chunks_count += len(chunked_docs)
93
+
94
+ for i, chunk_doc in enumerate(chunked_docs):
95
+ chunk_info.append({
96
+ 'document_id': chunk_doc.metadata.get('document_id', 'unknown'),
97
+ 'section_id': chunk_doc.metadata.get('section_id', 'unknown'),
98
+ 'chunk_id': i,
99
+ 'chunk_size': len(chunk_doc.text),
100
+ 'chunk_preview': chunk_doc.text[:200] + "..." if len(chunk_doc.text) > 200 else chunk_doc.text,
101
+ 'type': 'text'
102
+ })
103
+ else:
104
+ all_chunked_docs.append(doc)
105
+ chunk_info.append({
106
+ 'document_id': doc.metadata.get('document_id', 'unknown'),
107
+ 'section_id': doc.metadata.get('section_id', 'unknown'),
108
+ 'chunk_id': 0,
109
+ 'chunk_size': len(doc.text),
110
+ 'chunk_preview': doc.text[:200] + "..." if len(doc.text) > 200 else doc.text,
111
+ 'type': 'text'
112
+ })
113
+
114
+ log_message(f"=== PROCESSING STATISTICS ===")
115
+ log_message(f"Total tables processed: {table_count}")
116
+ log_message(f"Large tables (>{CHUNK_SIZE} chars): {large_tables_count}")
117
+ log_message(f"Total images processed: {image_count}")
118
+ log_message(f"Large images (>{CHUNK_SIZE} chars): {large_images_count}")
119
+ log_message(f"Total text chunks created: {text_chunks_count}")
120
+ log_message(f"Total documents after processing: {len(all_chunked_docs)}")
121
 
122
  return all_chunked_docs, chunk_info
123
 
 
350
  table_title = table_data.get('table_title', 'Неизвестно')
351
  section = table_data.get('section', 'Не��звестно')
352
 
 
353
  header_content = f"Таблица: {table_num}\nНазвание: {table_title}\nДокумент: {doc_id}\nРаздел: {section}\n"
354
 
355
  if 'data' in table_data and isinstance(table_data['data'], list):
356
+ table_content = header_content + "\nДанные таблицы:\n"
357
  for row_idx, row in enumerate(table_data['data']):
358
  if isinstance(row, dict):
359
  row_text = " | ".join([f"{k}: {v}" for k, v in row.items()])
360
+ table_content += f"Строка {row_idx + 1}: {row_text}\n"
361
+
362
+ doc = Document(
363
+ text=table_content,
364
+ metadata={
365
+ "type": "table",
366
+ "table_number": table_num,
367
+ "table_title": table_title,
368
+ "document_id": doc_id,
369
+ "section": section,
370
+ "section_id": section,
371
+ "total_rows": len(table_data['data'])
372
+ }
373
+ )
374
+ documents.append(doc)
375
+ else:
 
 
 
376
  doc = Document(
377
  text=header_content,
378
  metadata={
 
386
  )
387
  documents.append(doc)
388
 
389
+ return documents
390
 
391
  def load_table_data(repo_id, hf_token, table_data_dir):
392
  log_message("Начинаю загрузку табличных данных")
utils.py CHANGED
@@ -146,10 +146,6 @@ def generate_sources_html(nodes, chunks_df=None):
146
 
147
  if doc_type == 'text':
148
  html += f"<h4 style='margin: 0 0 10px 0; color: #63b3ed;'>📄 {doc_id}</h4>"
149
- # Show all sections for this document
150
- if source_info['sections']:
151
- sections_text = ", ".join(sorted(source_info['sections']))
152
- html += f"<p style='margin: 5px 0; color: #a0aec0; font-size: 14px;'>{sections_text}</p>"
153
 
154
  elif doc_type == 'table' or doc_type == 'table_row':
155
  table_num = metadata.get('table_number', 'unknown')
 
146
 
147
  if doc_type == 'text':
148
  html += f"<h4 style='margin: 0 0 10px 0; color: #63b3ed;'>📄 {doc_id}</h4>"
 
 
 
 
149
 
150
  elif doc_type == 'table' or doc_type == 'table_row':
151
  table_num = metadata.get('table_number', 'unknown')
Табличные данные_JSON/ГОСТ Р 50.01.01-2017.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8bebc9cfa99d47068d172d696ca673ac8d186f2f4ff422e52b16d6793bc19852
3
+ size 3865
Табличные данные_JSON/ГОСТ Р 50.03.01-2017.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1d049d9b5e872d32348cba145b45f055b414a8d7a53b98b5d12f09e1863659f4
3
+ size 292448
Табличные данные_JSON/ГОСТ Р 50.04.02-2018.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d89b7529b424406bb5b6cc4b7e3d26418b9964310b7c50b4e8a8e89063e7b919
3
+ size 12788
Табличные данные_JSON/ГОСТ Р 50.04.04-2018.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0849327daa88257d1ef0e1fed349d2ceb5c5c6fd59b1c21b2bf3e0d63f12116e
3
+ size 12169
Табличные данные_JSON/ГОСТ Р 50.04.06-2018.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bfd341c7a63cf793d479c61d8e7e754d5d56b247d8e6b8ce78bed8d400aee36e
3
+ size 3273
Табличные данные_JSON/ГОСТ Р 50.04.07-2022.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d5d2919c43f3e1b299cd68fab9562a60ef786f316750c98b65d73ffee6006d31
3
+ size 44817
Табличные данные_JSON/ГОСТ Р 50.04.08-2019.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:14adc8dbc02e4557992c8a3dec1c97481726098bbfa3f5f018538dbeca773abf
3
+ size 1866
Табличные данные_JSON/ГОСТ Р 50.05.01-2018.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:da3eeda11e828ae1d50e65b37570ac79ead7e8f968fdc64d34a9f2395bfaf7a9
3
+ size 106007
Табличные данные_JSON/ГОСТ Р 50.05.07-2019.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:74cd00bf969c684f146f7ca97572727d830bd2c6977145a713c05bc23b878fbf
3
+ size 65716
Табличные данные_JSON/ГОСТ Р 50.05.17-2019.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8d40c59922b8c43bee9032df51974fe6ed72208497c59385b56a0debc5ff7dae
3
+ size 65716
Табличные данные_JSON/ГОСТ Р 50.05.18-2019.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ab8210459fb77ba836ab46b8ca964a49104e548ad1eb6be7f21e55075dbaab14
3
+ size 6260
Табличные данные_JSON/ГОСТ Р 50.05.22-2020.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dd91ffebbb9d9e4883d1621a008dfda9def3be9eccfa00c1d64c1d4d5276d425
3
+ size 13395
Табличные данные_JSON/ГОСТ Р 50.05.23-2020.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0041a13ff01c7fe8135c3e1d32420b5450338bcc5c7b15f0dc2548adead05c7d
3
+ size 323660
Табличные данные_JSON/ГОСТ Р 50.05.24-2020.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:809b86062651c029d6ba3f8a9106e7a45302db7e06e0dbf87cde98b990bf5f25
3
+ size 149252
Табличные данные_JSON/ГОСТ Р 50.05.25-2020.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f11fb140772f804e8d760acb6ef9c70a45bbc0f3169663a52d8f270808bdde50
3
+ size 242923
Табличные данные_JSON/ГОСТ Р 50.06.01-2017.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:89ce8fc5791e172064f633426f6ed3947a307eaf08265ce865bb3ddc752c76a2
3
+ size 56414
Табличные данные_JSON/ГОСТ Р 50.08.01-2023.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:83749b20c36487830ef2a55defb15051219bf80ceb2dc5ae0fc51c35167eabc2
3
+ size 4159
Табличные данные_JSON/ГОСТ Р 50.08.04-2022.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3609bd101e65515eac3fccb7a29206fc5a7f4e12813d6b4c27da74fa9e2d586d
3
+ size 3714
Табличные данные_JSON/МУ 1.1.4.01.1422-2019.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ee894ee4bb33ba40eabe6188e39aa1466815d4ef67978fea855dfaaf02f58b82
3
+ size 8102
Табличные данные_JSON/МУ 1.2.3.07.0057-2018.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a83451b3a174f2deee20d72f1030cdefe2931223d34a1c8c6bce10e31370be2a
3
+ size 147620
Табличные данные_JSON/НП-068-05.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e41d440016a04c1d4358f0a5d5229b49e473d3b73744b47ebbf56fa7b3b5459e
3
+ size 449769
Табличные данные_JSON/НП-089-15.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d437457f6513b7b157f33beb15b4b5f812cdaf8a54a452e7563aaf12b7acbd11
3
+ size 151862
Табличные данные_JSON/НП-104-18_ГОСТ 59023.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ee3468bc116401f24b7ab1dff7850e458d933ab157639c3e7127451deb310291
3
+ size 2642133
Табличные данные_JSON/НП-105-18.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a519ea25badc75a15db5721d2f97583bdf809580b40895a3ed4474e50e24cae1
3
+ size 434836