add data viewer
Browse files- app/law_document_chunker.py +14 -6
app/law_document_chunker.py
CHANGED
|
@@ -31,12 +31,12 @@ class LawDocumentChunker:
|
|
| 31 |
self.supabase_client = SupabaseClient(settings.supabase_url, settings.supabase_key)
|
| 32 |
self.embedding_client = EmbeddingClient()
|
| 33 |
|
| 34 |
-
# Regex patterns cho các cấp độ cấu trúc
|
| 35 |
-
self.PHAN_REGEX = r"(Phần|PHẦN|Phần thứ)\s+(\d+|[IVXLCDM]+|nhất|hai|ba|tư|năm|sáu|bảy|tám|chín|mười)\.?\s
|
| 36 |
-
self.PHU_LUC_REGEX = r"(Phụ lục|PHỤ LỤC)\s+(\d+|[A-Z]+)\.?\s
|
| 37 |
-
self.CHUONG_REGEX = r"(Chương|CHƯƠNG)\s+(\d+|[IVXLCDM]+)\.?\s
|
| 38 |
-
self.MUC_REGEX = r"(Mục|MỤC)\s+\d+\.?\s
|
| 39 |
-
self.DIEU_REGEX = r"
|
| 40 |
self.KHOAN_REGEX = r"^\s*(\d+(\.\d+)*)\.\s*(.*)"
|
| 41 |
self.DIEM_REGEX_A = r"^\s*([a-zđ])\)\s*(.*)"
|
| 42 |
self.DIEM_REGEX_NUM = r"^\s*(\d+\.\d+\.\d+)\.\s*(.*)"
|
|
@@ -208,6 +208,10 @@ class LawDocumentChunker:
|
|
| 208 |
for line in lines:
|
| 209 |
level, level_value, level_content = self._detect_structure_level(line)
|
| 210 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 211 |
# Nếu phát hiện cấp độ mới
|
| 212 |
if level != "CONTENT" and level_value:
|
| 213 |
# Lưu chunk hiện tại nếu có
|
|
@@ -224,9 +228,11 @@ class LawDocumentChunker:
|
|
| 224 |
|
| 225 |
# Thêm vào stack NGAY LẬP TỨC
|
| 226 |
chunk_stack.append((metadata.id, current_level, current_level_value))
|
|
|
|
| 227 |
|
| 228 |
# Tìm parent cho level mới TRƯỚC KHI tạo chunk mới
|
| 229 |
current_parent = self._find_parent_for_level(chunk_stack, level, level_priority)
|
|
|
|
| 230 |
|
| 231 |
# Bắt đầu chunk mới
|
| 232 |
current_chunk_content = line + "\n"
|
|
@@ -254,6 +260,7 @@ class LawDocumentChunker:
|
|
| 254 |
|
| 255 |
# Thêm vào stack NGAY LẬP TỨC
|
| 256 |
chunk_stack.append((metadata.id, current_level, current_level_value))
|
|
|
|
| 257 |
|
| 258 |
current_chunk_content = ""
|
| 259 |
|
|
@@ -271,6 +278,7 @@ class LawDocumentChunker:
|
|
| 271 |
|
| 272 |
# Thêm vào stack NGAY LẬP TỨC
|
| 273 |
chunk_stack.append((metadata.id, current_level, current_level_value))
|
|
|
|
| 274 |
|
| 275 |
logger.info(f"[CHUNKER] Created {len(chunks)} chunks from document")
|
| 276 |
return chunks
|
|
|
|
| 31 |
self.supabase_client = SupabaseClient(settings.supabase_url, settings.supabase_key)
|
| 32 |
self.embedding_client = EmbeddingClient()
|
| 33 |
|
| 34 |
+
# Regex patterns cho các cấp độ cấu trúc - SỬA LẠI ĐỂ CHÍNH XÁC HƠN
|
| 35 |
+
self.PHAN_REGEX = r"^(Phần|PHẦN|Phần thứ)\s+(\d+|[IVXLCDM]+|nhất|hai|ba|tư|năm|sáu|bảy|tám|chín|mười)\.?\s*"
|
| 36 |
+
self.PHU_LUC_REGEX = r"^(Phụ lục|PHỤ LỤC)\s+(\d+|[A-Z]+)\.?\s*"
|
| 37 |
+
self.CHUONG_REGEX = r"^(Chương|CHƯƠNG)\s+(\d+|[IVXLCDM]+)\.?\s*"
|
| 38 |
+
self.MUC_REGEX = r"^(Mục|MỤC)\s+\d+\.?\s*"
|
| 39 |
+
self.DIEU_REGEX = r"^Điều\s+(\d+)\.\s*(.*)"
|
| 40 |
self.KHOAN_REGEX = r"^\s*(\d+(\.\d+)*)\.\s*(.*)"
|
| 41 |
self.DIEM_REGEX_A = r"^\s*([a-zđ])\)\s*(.*)"
|
| 42 |
self.DIEM_REGEX_NUM = r"^\s*(\d+\.\d+\.\d+)\.\s*(.*)"
|
|
|
|
| 208 |
for line in lines:
|
| 209 |
level, level_value, level_content = self._detect_structure_level(line)
|
| 210 |
|
| 211 |
+
# Debug logging
|
| 212 |
+
if level != "CONTENT" and level_value:
|
| 213 |
+
logger.debug(f"[CHUNKER] Line: '{line.strip()}' -> Level: {level}, Value: {level_value}")
|
| 214 |
+
|
| 215 |
# Nếu phát hiện cấp độ mới
|
| 216 |
if level != "CONTENT" and level_value:
|
| 217 |
# Lưu chunk hiện tại nếu có
|
|
|
|
| 228 |
|
| 229 |
# Thêm vào stack NGAY LẬP TỨC
|
| 230 |
chunk_stack.append((metadata.id, current_level, current_level_value))
|
| 231 |
+
logger.debug(f"[CHUNKER] Created chunk: {metadata.id[:8]}... Level: {current_level}, Parent: {current_parent}")
|
| 232 |
|
| 233 |
# Tìm parent cho level mới TRƯỚC KHI tạo chunk mới
|
| 234 |
current_parent = self._find_parent_for_level(chunk_stack, level, level_priority)
|
| 235 |
+
logger.debug(f"[CHUNKER] Found parent for {level}: {current_parent}")
|
| 236 |
|
| 237 |
# Bắt đầu chunk mới
|
| 238 |
current_chunk_content = line + "\n"
|
|
|
|
| 260 |
|
| 261 |
# Thêm vào stack NGAY LẬP TỨC
|
| 262 |
chunk_stack.append((metadata.id, current_level, current_level_value))
|
| 263 |
+
logger.debug(f"[CHUNKER] Created sub-chunk: {metadata.id[:8]}... Level: {current_level}, Parent: {current_parent}")
|
| 264 |
|
| 265 |
current_chunk_content = ""
|
| 266 |
|
|
|
|
| 278 |
|
| 279 |
# Thêm vào stack NGAY LẬP TỨC
|
| 280 |
chunk_stack.append((metadata.id, current_level, current_level_value))
|
| 281 |
+
logger.debug(f"[CHUNKER] Created final chunk: {metadata.id[:8]}... Level: {current_level}, Parent: {current_parent}")
|
| 282 |
|
| 283 |
logger.info(f"[CHUNKER] Created {len(chunks)} chunks from document")
|
| 284 |
return chunks
|