Browse Source

fix(补文档目录提取规则)

tangle 1 ngày trước cách đây
mục cha
commit
05ca18a79e

+ 23 - 10
core/construction_review/component/minimal_pipeline/pdf_extractor1.py

@@ -23,16 +23,20 @@ TABLE_OCR_START = "[表格OCR识别结果]:"
 TABLE_OCR_END = "[/表格]"
 CN_LIST_L1_NUMERIC_L2_RULE = "Rule_8_中文序号章数字小节派"
 CATALOG_LIST = {
-    '编制依据':['法律法规','标准范围','文件制度','编制原则','编制范围'],
-    '工程概况':['设计概况','工程地质与水文气象','周边环境','施工平面及立面布置','施工要求和技术保证条件','风险辨别与分级','参建各方责任主体单位'],
-    '施工计划':['施工进度计划','施工材料计划','施工设备计划','劳动力计划','安全生产费用使用计划'],
-    '施工工艺技术':['主要施工方法概述','技术参数','施工准备','工艺流程','施工方法及操作要求','检查要求'],
-    '安全保证措施':['安全保证体系','组织保证措施','技术保证措施','监测监控措施','应急处置措施'],
-    '质量保证措施':['质量保证体系','质量目标','工程创优规划','质量控制程序与具体措施'],
+    '编制依据':['法律法规','标准范围','文件制度','编制原则','编制范围','规范标准法律法规','项目部文件','相关规范、标准、法律、法规等'],
+    '工程概况':['设计概况','工程地质与水文气象','周边环境','施工平面及立面布置','施工要求和技术保证条件','风险辨别与分级','参建各方责任主体单位','工程概况和特点','施工要求'],
+    '施工计划':['施工进度计划','施工材料计划','施工设备计划','劳动力计划','安全生产费用使用计划','工期计划','材料设备计划'],
+    '施工工艺技术':['主要施工方法概述','技术参数','施工准备','工艺流程','施工方法及操作要求','检查要求','液压爬模工程','空心薄壁墩施工方案','临时设施安装拆除'],
+    '安全保证措施':['安全保证体系','组织保证措施','技术保证措施','监测监控措施','应急处置措施','组织机构制度','危险源辨识','一般安全技术措施','专项安全技术措施','监控量测措施','森林防火','组织机构、制度及体系'],
+    '质量保证措施':['质量保证体系','质量目标','工程创优规划','质量控制程序与具体措施','质量管理组织机构职责','质量管理控制措施','质量管理组织结构及职责'],
     '环境保证措施':['环境保证体系','环境保护组织机构','环境保护及文明施工措施'],
     '施工管理及作业人员配备与分工':['施工管理人员','专职安全生产管理人员','特种作业人员','其它作业人员'],
-    '验收要求':['验收标准','验收程序','验收内容','验收时间','验收人员'],
-    '其它资料':['计算书','相关施工图纸','附图附表','编制及审核人员情况']
+    '验收要求':['验收标准','验收程序','验收内容','验收时间','验收人员','验收结果'],
+    '其它资料':['计算书','相关施工图纸','附图附表','编制及审核人员情况'],
+    '应急处置方案':['应急组织机构职责','应急响应','一般事故现场应急处置','桥梁坍塌事故专项应急','宣传培训与训练','应急物质'],
+    '环境保护、水土保持保证体系及保证措施':['环境保护、水土保持保证体系','环保、水保保护措施','水土保持措施'],
+    '计算书及相关图纸':['液压爬模计算书','预制板计算'],
+    '编制审核人员情况':[]
 }
 
 @dataclass(frozen=True)
@@ -2110,7 +2114,11 @@ class PdfStructureExtractor:
         if not normalized:
             return None
 
-        for chapter_title, section_titles in CATALOG_LIST.items():
+        for chapter_title in CATALOG_LIST.keys():
+            if normalized == cls._normalize_catalog_name(chapter_title):
+                return chapter_title
+
+        for chapter_title in CATALOG_LIST.keys():
             if cls._catalog_name_matches_standard(normalized, chapter_title):
                 return chapter_title
         return None
@@ -2132,6 +2140,11 @@ class PdfStructureExtractor:
         else:
             chapter_candidates = list(CATALOG_LIST.keys())
 
+        for candidate_chapter in chapter_candidates:
+            for section_title in CATALOG_LIST.get(candidate_chapter, []):
+                if normalized == cls._normalize_catalog_name(section_title):
+                    return section_title
+
         for candidate_chapter in chapter_candidates:
             for section_title in CATALOG_LIST.get(candidate_chapter, []):
                 if cls._catalog_name_matches_standard(normalized, section_title):
@@ -2155,7 +2168,7 @@ class PdfStructureExtractor:
         extracted_len = len(extracted)
         if extracted_len < 5:
             return extracted == standard
-        if extracted_len > 15:
+        if extracted_len > 20:
             return False
 
         overlap_count = sum((Counter(extracted) & Counter(standard)).values())