文档一致性校对技能 v2.4.6
核心原则
简洁高效,让模型自主工作。问题分级输出,帮用户区分轻重缓急。
📌 工作流程
第一步:提取文档内容
⚠️ 【部分章节检查提示】
- 如果用户只要求检查部分章节/页面,请先提醒用户:建议将该部分内容另存为新文档后再提交校对
- 因为模型需要阅读整篇文档才能判断上下文一致性,单独检查部分章节的调用量与全文检查相近,效果不一定更好
- 如果用户坚持只检查部分章节,可以只提取指定章节内容进行检查,但需在报告中说明"仅检查了指定章节,全文一致性未覆盖"
根据文件类型选择读取方式:
| 文件格式 | 工具 | 方法 |
|---------|------|------|
| .docx | python-docx | 提取段落和表格 |
| .pdf | pymupdf + pdfplumber | 文本 + 表格双轨提取 |
| .doc | win32com / 转换为 docx | COM 接口 |
| .xlsx | openpyxl | 读取 Excel |
| .txt/.md | 直接读取 | 纯文本 |
# DOCX 提取(推荐方式)
import sys, glob
sys.stdout.reconfigure(encoding='utf-8')
from docx import Document
files = glob.glob('path/*报告*.docx')
doc = Document(files[0])
paragraphs = []
for i, para in enumerate(doc.paragraphs):
text = para.text.strip()
if text:
paragraphs.append({'index': i, 'text': text})
tables = []
for t_idx, table in enumerate(doc.tables):
rows = [[cell.text.strip() for cell in row.cells] for row in table.rows]
tables.append({'index': t_idx, 'rows': rows})
print(f'段落数: {len(paragraphs)}, 表格数: {len(tables)}')
第二步:模型自主分析
模型直接阅读文档内容,自主发现所有类型的不一致问题。
检查范围(全面覆盖)
A类:数据矛盾(严重)
- 同一指标(面积、人口、工程量、投资额等)在不同章节出现不同数值
- 分项数据与汇总数据加减不符(需验算,如800+500+200=1500但总计数为1400)
- 百分比与对应绝对值不符
- 资金分项自动求和校验:自动计算分项合计,与总投资/工程投资等总金额对比,发现偏差立即标注(P0)
- 工程量单位统一校验:检测不同单位混用导致的汇总失败问题(P0)
- 多年平均降雨量等核心数据前后不一致,直接判定为P0(影响报告可信度)
B类:逻辑异常(严重)
- 规划目标与建设内容数量明显不符
- 时序逻辑错误(如"2020年规划"出现在"2025年现状"章节)
- 单位量级明显异常(如泵站流量远超总量)
- 完工时间在总工期内(如总工期2024年5月—2025年12月,但完工时间写2024年12月,属于工期内但需核实"完成主体工程"是否等于"完工验收")
- 完工时间超出总工期截止年份(如总工期2024-2025,但完工时间写2026年)→ P0
- 验收时间超出计划工期(如总工期截止2025.12,但验收时间写2026.01)→ P0
- 时序节点全链路检测:提取所有年份+月份+任务类型(设计/招标/开工/完工/验收/投产等),生成时间轴,校验"设计→招标→开工→完工→验收→投产"的前置后置关系:
- 设计时间晚于开工时间 → P0
- 开工时间晚于完工时间 → P0
- 完工时间晚于验收时间 → P0
- 完工时间超出总工期截止年份 → P0
- 验收时间超出计划工期截止年份 → P0
C类:编号与结构问题(需核实) → 统一判定为P1
- 目录编号与正文标题编号不一致(如目录6 vs 正文7)
- 章节编号跳段(如直接跳到3.2节而缺失3.1节)
- 章节标题与对应正文内容不符
- 表格标题与表格内容不对应(如标题为"水库基本参数"但内容为"工程量统计")
D类:术语与格式问题(建议修正)
- 同一概念使用不同术语(如"小型水库"/"小水库"/"小Ⅰ型水库"混用)
- 同一概念使用不同称谓(如"总投资"/"投资估算"/"工程投资"混用)
- 数字单位写法不统一(如"亩"/"万亩"混用、"m³"/"立方米"混用、"m"/"米"混用、"万元"/"元"混用)
- 数字与文字之间空格不统一(如"100万元"vs"100 万元")
- 标准引用缺书名号(如"SL 640-2013"应加《》书名号)
- 标点符号使用不规范
- 所有D类问题统一判定为P2
E类:规范引用问题(需核实/建议修正)
⚠️ 静态库提示:
standards_library.json已内置 141条 常见水利规范数据(截止 2026-04-09),建议每季度手动更新一次。完整库(800+)访问:http://gjkj.mwr.gov.cn/jsjd1/bzcx/
核查分三步走:
第一步:从文档中提取规范编号
常见格式:
GB/T 50123-2019(国标推荐性)GB 50201-2014(国标全文强制)SL 252-2017(水利行业标准)SL/T 618-2021(水利行业推荐标准)GB 50487-2008(2022年版)(局部修订版)
第二步:查静态库(standards_library.json)
⚠️ 编号归一化:静态库的 key 格式为
GB/T 50363-2019(/后有空格), 但文档引用常写为GB/T50363-2018(无空格)。查表前需去掉空格归一化。def normalize(std_id): return std_id.replace(' ', '').replace('\u3000', '') lib_norm = {normalize(k): k for k in stds.keys()}
库中每条标准字段:
| 字段 | 说明 |
|------|------|
| status | 现行 / 已修订 / 废止 |
| latest | 当前最新版本编号 |
| replaced_by | 被哪个标准替代(已修订时) |
| superseded | 本标准替代了哪些旧版 |
| category | 国标/水利行业标准等 |
命中静态库 → 直接判定,输出结论
重要:E类需同时检查标准号和标准名称
- 标准号检查:标准号是否存在、是否已废止、是否有更新版本
- 标准名称检查:文档引用的标准名称是否与标准号匹配(防止"SL303-2017《错误名称》"这类错误)
- E类分级标准(严格对齐,不降级不升级):
- P0:已废止且有明确替代版本的标准(如SL303-2014→SL303-2017、SL166-2010→SL/T291.3-2025)
- P1:未收录但可推断最新版本的标准(需标注"建议核实年份")
- P1:标准名称与标准号不匹配(如"GB/T50662-2011名称错误")
- P2:格式问题(缺书名号、HJ/T格式不规范、数字空格不统一等)
- 建议输出完整引用:发现问题时同时输出新标准的完整引用(标准号 + 《标准名称》)
- 例如:
GB/T50363-2006废止 → 建议改为GB/T50363-2018《节水灌溉工程技术标准》latest字段已在静态库中记录此信息,审核时应直接使用。- 常见废止标准及替代版本(需熟记):
- SL 303-2014 → 已废止,被 SL 303-2017 替代
- SL 166-2010 → 已废止,被 SL/T 291.3-2025 替代(2025-09-29发布)
- GB 50013-2006 → 已废止,应为 GB 50013-2018
第三步:规范核查(查库 + 未收录时联网入库)
⚠️ 【强制要求】E类检测必须执行! 每篇报告都要提取并核查所有规范引用,不得遗漏。
E类规范引用核查遵循以下流程:
① 查静态库
import re, json
# 库加载(归一化key)
lib = json.load(open('standards_library.json', encoding='utf-8'))
stds = lib['standards']
def norm_key(key):
"""库key归一化:去空格 + 全角→半角 + HJ/T数字→HJ数字"""
key = key.replace(' ', '').replace('-', '-').replace('—', '-')
return re.sub(r'^HJ/T(\d)', r'HJ\1', key)
# 归一化key → 原key 映射(同归一化key可能对应多个原key,取第一个)
lib_norm_map = {}
for k in stds:
n = norm_key(k)
if n not in lib_norm_map:
lib_norm_map[n] = k
def clean_std(raw):
"""从文档原文提取标准号"""
raw = raw.strip().rstrip(' )))):::。.,,')
patterns = [
(r'GB/T\s*(\d+(?:\.\d+)?[--]?\d*)', 'GB/T'),
(r'GB\s*(\d+(?:\.\d+)?[--]?\d*)', 'GB'),
(r'SL/T\s*(\d+(?:\.\d+)?[--]?\d*)', 'SL/T'),
(r'SL/Z\s*(\d+(?:\.\d+)?[--]?\d*)', 'SL/Z'),
(r'SL\s*(\d+(?:\.\d+)?[--]?\d*)', 'SL'),
(r'HJ/T\s*(\d+(?:\.\d+)?[--]?\d*)', 'HJ/T'),
(r'HJ\s*(\d+(?:\.\d+)?[--]?\d*)', 'HJ'),
(r'DL\s*(\d+(?:\.\d+)?[--]?\d*)', 'DL'),
]
for pat, prefix in patterns:
m = re.match(pat, raw, re.I)
if m:
num = m.group(1).replace('-', '-').replace('—', '-').replace(' ', '')
return prefix + num
return None
def lookup(std_key):
"""
查询标准状态。
策略:
1. 归一化精确匹配(HJ/T2.3-2018 → HJ2.3-2018)
2. 原值精确匹配
3. 前缀兜底(GB50201 → 找 GB50201-* 取最新年份)
"""
n = norm_key(std_key)
# ① 归一化匹配
if n in lib_norm_map:
return stds[lib_norm_map[n]], lib_norm_map[n]
# ② 原值匹配
if std_key in stds:
return stds[std_key], std_key
# ③ 前缀兜底(文档缺少年份时)
has_year = bool(re.search(r'-\d{4}', std_key))
if not has_year:
matches = [(k, stds[k]) for k in stds if k.startswith(std_key)]
if matches:
def year_of(k):
m = re.search(r'-(\d{4})', k)
return int(m.group(1)) if m else 0
matches.sort(key=lambda x: year_of(x[0]), reverse=True)
best_key, best_val = matches[0]
inferred = dict(best_val)
inferred['_inferred'] = True
return inferred, best_key
return None, None
命中 → 直接判定(现行有效 / 已废止 / 已修订)
未命中(含前缀推断结果)→ 进入②
前缀推断结果标注 _inferred: True,输出时提示"建议核实年份"
② 未收录时询问用户
对所有未命中静态库的标准,汇总后一次性询问用户:
以下 N 个标准未收录于本地库,请确认是否联网核查现行状态?
• GB/T50625-2023 @[第3段]
• SL xxx-xxxx @[第7段]
• ...
是否联网核查?(Y/N)
③ 联网核查(用户同意后)
调用 web_search,逐条查询:
查询词:【标准号】+ 关键词 + 现行标准 / 最新版
示例:GB/T 50625-2023 规范名称 现行标准 最新版
根据搜索结果判断: | 搜索结果 | 判定 | |---------|------| | 全国标准信息公共服务平台 / 水利部 / 生态环境部有记录 | 现行有效 | | 明确标注"已废止""已被替代" | 已废止 | | 有更新版本号 | 已修订(含 latest 和 replaced_by)|
④ 自动入库
联网核查完成后,将结果追加写入静态库:
lib = json.load(open('standards_library.json', encoding='utf-8'))
stds = lib['standards']
stds['GB/T50625-2023'] = {
'name': '规范名称',
'status': '现行有效', # 或 '已废止' / '已修订'
'category': 'GB/T',
'替代': '被替代的标准号(已修订时)',
}
lib['standards'] = stds
with open('standards_library.json', 'w', encoding='utf-8') as f:
json.dump(lib, f, ensure_ascii=False, indent=2)
⚠️ 重要:入库后所有 key 必须归一化(去空格、
-→-、—→-),以确保后续查询命中。
⑤ 格式规范检查
| 引用场景 | 正确格式 | 错误示例 | 级别 |
|---------|---------|---------|------|
| 中文规范名 | 《规范名称》GB/T XXXXX-XXXX | 仅写GB/T XXXXX无书名号 | P2 |
| 中文规范名 | 《SL 640-2013》 | SL 640-2013 缺书名号 | P2 |
| HJ/T格式 | HJ 2.3-2018(《环境空气质量标准》 HJ 2.3-2012) | HJ/T 2.3-2012(T应去掉) | P2 |
| HJ/T保留 | HJ/T 88-2003(排放许可,不归一化) | 特殊标准号按原样引用 | - |
| 英文规范名 | <ISO 9001:2015> | ISO 9001:2015 无包裹 | P2 |
| 同时出现 | 《规范名称》<英文缩写> | 混用书名号和尖括号 | P2 |
| 局部修订版 | GB 50487-2008(2022年版) | GB 50487-2008 不注版本 | P2 |
| 标准号+名称 | GB/T50363-2018《节水灌溉工程技术标准》 | 仅写标准号无名称,或名称与号不匹配 | P1 |
- 常见标准代号:GB(国家)、GB/T(推荐性国标)、SL(水利)、DL(电力)、JG(建工)、DB(地方)
- 正文引用与文末参考文献列表是否一致
- HJ/T格式规范:HJ/T后接数字(如HJ/T2.3)应归一化为HJ2.3,但HJ/T88等特定标准号例外保留原值
- 书名号规范:中文标准引用必须加《》书名号
分析要点
- 同一指标在不同章节出现不同数值 → 标记为矛盾
- 同一指标在不同年份合理变化 → 不是矛盾
- 分项数据与汇总数据的关系 → 逐一验算加减
- 发现一致性好的部分 → 记录在"校对好的部分"
- 规范引用 → 逐一核对编号、年代、名称是否与权威来源一致
第三步:问题分级
每个问题必须标注优先级:
| 级别 | 标准 | 处理建议 | |------|------|---------| | P0 严重 | 数据直接矛盾、数量级错误、影响文件可信度 | 必须修正后才能提交 | | | 包括:同一指标多处数值矛盾、分项合计与总和不符、完工/验收超出工期、多年平均降雨量等核心数据前后不一致、已废止标准有明确替代版本 | | | P1 需核实 | 数据存疑、编号错误、逻辑不清晰、未收录但可推断最新版本的标准 | 建议核实后修正 | | P2 建议 | 格式不统一、术语轻微差异、表述瑕疵、缺书名号等 | 酌情修改 |
⚠️ 【分级红线】以下情况不得降级:
- 多年平均降雨量、工程投资等核心指标前后矛盾 → P0
- 已废止标准(SL303-2014、SL166-2010、GB50013-2006等)→ P0(有明确替代版本)
- 章节编号跳段、目录正文不一致 → P1
- 术语混用、单位不统一、格式问题 → P2
第四步:生成结果
⚠️ 【强制要求】完成分析后必须执行此步骤,不得跳过!
输出到用户原文档位置(不在工作目录)
【必须同时输出以下两个文件,缺一不可】:
- 校对报告(.md)—— 放在原文档同目录
- 带批注文件(_annotated.docx)—— 放在原文档同目录,原文黄色高亮+段落末尾橙色说明
⚠️ 提示:生成的 _annotated.docx 文件请用 Microsoft Office Word 打开(不要用 WPS,两者渲染效果不同)
位置标注格式:
位置:第4页第163段 ↔ 第4页第180段
标注方式:
- 原文问题处 → 黄色高亮 (
highlight_color=4) - 标注说明 → 橙色高亮 (
highlight_color=7) + 粗体
"""
DOCX 标注工具 - 在原文处黄色高亮 + 段落末尾橙色说明
健壮版:含异常处理,不因单个问题失败而中断整个流程
"""
import sys, glob, shutil
sys.stdout.reconfigure(encoding='utf-8')
from docx import Document
from docx.oxml.ns import qn
from docx.shared import RGBColor
def highlight_run(run):
"""为 run 添加黄色背景高亮"""
try:
rPr = run._r.makeelement(qn("w:rPr"), {})
hl = run._r.makeelement(qn("w:highlight"), {})
hl.set(qn("w:val"), "yellow")
rPr.append(hl)
run._r.insert(0, rPr)
return True
except Exception:
return False
def annotate_simple(input_path, output_path, issues):
"""
标注 DOCX - 在原文处黄色高亮 + 段落末尾橙色说明
健壮实现:单个问题失败不影响其余问题处理
issues 格式:
[{
"text": "问题关键词(用于定位)",
"type": "数据矛盾/逻辑异常/编号错误/术语不统一/规范引用错误",
"priority": "P0/P1/P2",
"para_index": 段落索引(从0起),
"estimated_page": 估算页码,
"problem": "问题描述",
"suggestion": "修正建议",
"compare_location": "对比位置(第X页第Y段 ↔ 第X页第Y段,确保批注与校对报告一致)"
}, ...]
> ⚠️ **【定位精度要求】**
> - para_index:段落在文档中的顺序索引(从0起),需与校对报告中"第X段"对应
> - estimated_page:估算页码,需与校对报告中"第X页"对应
> - compare_location:格式为"第X页第Y段 ↔ 第X页第Y段",确保校对报告与批注文档位置一致,无偏差
> - 避免段落索引偏差:同一问题在校对报告和批注文档中的段落编号应完全一致
"""
# Step 1: 复制原文件(失败则退出)
try:
shutil.copy2(input_path, output_path)
except Exception as e:
print(f"[错误] 无法复制文件:{e}")
return 0
# Step 2: 打开文档(失败则退出)
try:
doc = Document(output_path)
except Exception as e:
print(f"[错误] 无法打开文档:{e}")
return 0
processed = 0
failed = 0
for issue in issues:
target = issue.get("text", "").strip()
para_index = issue.get("para_index", 0)
estimated_page = issue.get("estimated_page", 1)
priority = issue.get("priority", "P1")
if not target or para_index < 0:
continue
if para_index >= len(doc.paragraphs):
failed += 1
continue
para = doc.paragraphs[para_index]
# Step 3: 在原文中查找并高亮问题文字(黄色)
for run in para.runs:
if target in run.text:
try:
highlight_run(run)
except Exception:
pass
# Step 4: 在段落末尾添加橙色粗体标注
location = f"第{estimated_page}页第{para_index}段"
compare_loc = issue.get("compare_location", "")
compare_hint = f" ↔ {compare_loc}" if compare_loc else ""
annotation = (
f"\n\n"
f">> 【{priority}·{issue.get('type', '')}】{location}{compare_hint}\n"
f"问题:{issue.get('problem', '')}\n"
f"建议:{issue.get('suggestion', '')}"
)
try:
run = para.add_run(annotation)
run.font.highlight_color = 7
run.font.bold = True
run.font.color.rgb = RGBColor(0xFF, 0x80, 0x00)
processed += 1
except Exception:
failed += 1
# Step 5: 保存
try:
doc.save(output_path)
print(f"标注完成:成功 {processed} 条,失败 {failed} 条")
return processed
except Exception as e:
print(f"[错误] 保存失败:{e}")
return 0
# issues 格式示例:
# [{
# "text": "428.24",
# "type": "数据矛盾",
# "priority": "P0",
# "para_index": 163,
# "estimated_page": 4,
# "problem": "渠道总长428.24km,但分项相加只有398.54km",
# "suggestion": "核实总长数据或检查分项统计",
# "compare_location": "第4页第180段"
# }, ...]
校对报告模板
⚠️ 【强制要求】生成的报告必须包含以下所有章节,不得遗漏!
# {文档名称} 校对报告
---
### 📋 文档信息
| 项目 | 内容 |
|:-----|:-----|
| 文档名称 | {文档名称} |
| 发现问题 | **X 处**(P0: X个 / P1: X个 / P2: X个) |
| 检测时间 | {YYYY-MM-DD} |
---
### 🔴 严重问题(P0 - 必须修正)
---
#### 问题 1:{问题简述}
> **位置**:第 X 页第 Y 段 ↔ {对比位置}
**原文摘录**:
{原文内容}
**发现问题**:{详细描述}
**修正建议**:{修正建议}
---
### 🟡 需核实问题(P1 - 建议核实)
(同上格式)
---
### 🔵 建议优化(P2 - 格式/术语)
(同上格式)
---
### ✅ 一致性校对好的部分
- {一致性良好的数据/章节说明}
- {另一个良好的部分}
---
### 📊 修改建议优先级汇总
| 优先级 | 问题 | 建议 |
|:------:|------|------|
| 🔴 P0 | {问题简述} | {修正建议} |
| 🟡 P1 | {问题简述} | {修正建议} |
| 🔵 P2 | {问题简述} | {修正建议} |
---
### ⚠️ 免责声明
本报告由 AI 自动生成,**仅供辅助参考**。报告中的问题标注基于文档文本的一致性核查,不代表对文档内容真实性的完全验证。
- 本报告**不能替代人工审核**,尤其涉及数据、工程量、投资额等关键信息时,请务必对照原始批复文件、设计图纸等进行核实
- 规范引用问题基于内置标准库(141条,截止2026-04-09)及网络核查结果,标准状态可能随政策更新而变化,建议以水利部等官方平台最新公布为准
- 报告生成方不对因使用本报告而产生的任何直接或间接损失负责,使用前请自行判断
---
*报告由文档一致性校对助手 v2.4.6 自动生成*
⚠️ 注意事项
关于效率
- 不要对每个指标都用正则精确匹配
- 模型直接阅读关键段落,自主判断
- 只在发现明显问题时才标记
- 避免重复核查同一数据
- 同段落内同一指标不重复标记:同一段落中多次出现的相同指标(如"灌区面积10万亩"在一段中出现2次),只标记第1次,其余忽略
- 重复错误多处出现时,每处都要分别标注并说明修改方法:同一个错误在文档不同位置(不同段落/不同页)出现时,每处都要标注,且每处都要说明如何修改,不能只标注一次然后写"同上"或"见上述"
关于输出
- 不多生成中间文件(如 xxx_check.txt、xxx_extracted.txt 等)
- 只输出校对报告(.md)和带批注文件(_annotated.docx)
- 如果用户只需要报告,不需要标注文件,说明即可
关于问题分级
- P0:数字直接矛盾、数量级错误 → 用户提交前必须修正
- P1:数据存疑、编号错误 → 建议核实
- P2:格式、术语轻微差异 → 酌情修改
v2.4.2 - 2026-04-09
- 新增问题三级分级(P0/P1/P2)
- 扩展检查范围:编号结构、单位统一性、格式问题
- 报告新增"✅ 校对好的部分"和"修改建议优先级汇总表"
- issues 数据结构新增
priority字段 - 标注格式:【P0·数据矛盾】更直观
- 新增 E类检查:规范引用问题(名称/版本号/格式正确性检查)
v2.4.3 - 2026-04-09
- 内置静态库大更新:新增2025~2026年发布的水利标准15条,库从66条升至122条(截止2026-04-09)
- SL/T 631.1~.7-2025(7项,替代已废止的SL 631-2012)
- SL/T 808-2025(替代SL/T 808-2021)、SL/T 838-2025、SL/T 839-2025(3项)
- SL/T 219/545/553/872/877-2026(5项,2026年新发布)
- SL 191-2008 → 已废止(被SL/T 191-2025替代);SL 631-2012 → 已废止
- SKILL.md修正:第四步"输出"章节原说标注文件"仅当用户明确要求时生成",与"注意事项"矛盾
- 改为:每次必须同时输出校对报告.md + _annotated.docx,不再区分默认/按需
- 强化标注脚本健壮性:添加异常处理,单条失败不中断整体流程
- 规范引用格式检查:中文《》英文<>格式标准
- 静态库编号归一化:查表前须
replace(' ', '')归一化(静态库格式GB/T 50363vs 文档GB/T50363) - 静态库 latest 字段改为完整引用格式(标准号 + 《标准名称》)
- E类规范引用必须输出完整引用,不得只说"改为XX版"
- 报告模板新增完整免责声明;标准库条数更新为122条
- 本次修复(WPS截图反馈4条):
- SL/T 386-2025(水利水电工程边坡与挡土墙设计规范):新增入库(现行,替代SL 386-2007和SL 379-2007)
- GB/T 50662-2011:名称修正为《水工建筑物抗冰冻设计标准》(2024年版,2025-02-01实施,局部修订)
- SL/T 551-2024:补充note(现行,2025-01-22实施)
- SL/T 191-2025:确认现行(替代SL 191-2008,2026-06-01实施)
- 同步更新被替代标准状态:SL 386-2007/SL 379-2007 → 已废止
- 本次修复(喜德报告核查):
- 喜德报告引用26条标准,入库前15条为ISSUE(已废止)
- 新增入库18条:SL55-2005/SL44-2006/SL482-2011/SL744-2016/SL189-2013(均已废止,含替代表)及其他MISS标准
- SL247-2012 → 已废止(被SL/T 247-2020替代);SL106-2017 → 已废止(被GB 5084-2021替代)
- SL/Z582-2012 → 已废止(813清单未收录)
- SL640-2013修正名称为《输变电项目水土保持技术规范》(现行)
- 静态库升至122条(现行98/已修订3/已废止21)
v2.4.8 - 2026-04-09
- 静态库key规范化(核心修复):库中有100个key带空格(如
'SL 379-2007','SL/T 386-2025'等),导致clean_std()提取的'SL379-2007'(无空格)查不到 → P1已废止仅检出10个(应为15个)- 修复:在库加载时统一
norm(k) = k.replace(' ','').replace('-','-').replace('—','-')归一化所有key - 同时修复
clean_std():从匹配文本中正确提取数字部分
- 修复:在库加载时统一
- A类灌溉保证率正则修复:原正则
灌溉[的]?保证率不覆盖"灌溉设计保证率" → 75%漏检 → 修改为灌溉(?:设计)?[的]?保证率 - A类设计洪水范围值:
\d+(?:[~\-至]\d+)?捕获"5~10",但float("5~10")报错 → 取第一个数字re.search(r'\d+', m.group(1)).group() - E类T团体标准:
T\d{2,3}[--]\d{4}只收录T+年份格式(如T01-2007),过滤T450等噪声 - 喜德报告实测:A类3个矛盾(灌溉保证率75%/80%、设计洪水5年/10年、降雨量1000/1037mm)、B类术语2组、E类P0×2+P1×15+P2×18
v2.4.9 - 2026-04-09
- 联网核查P2标准:喜德报告18个P2标准联网逐一查询全国标准信息公共服务平台/生态环境部/水利部,确认现行状态
- 静态库新增17条:GB×12(GB/T13663.2/GB/T20203/GB/T21010/GB50434/GB5084/GB51018/GB5749/GB50013-2018/GB50199/GB50332/GB50433/GB/T51240/GB/T45107-2024)、HJ×5(HJ2.2/HJ2.3/HJ2.4/HJ19/HJ/T88)、SL×13(SL/T260-2025/SL/T277/SL/T290/SL/T440/SL/T442/SL492-2025/SL72/SL73.3/SL203-97/SL207-98)
- 发现1条已废止:SL166-2010(已被SL/T291.3-2025替代,2025-09-29发布)
- 发现版本需更新:GB50013-2006(应为GB50013-2018,2006版已废止)
- 静态库升至139条(现行有效114/已修订3/已废止22)
v2.4.6 - 2026-04-10
- B类时序规则细化:拆分"完工时间在总工期内"(需核实)和"完工时间超出总工期"(P0)两个检测点,表述更清晰
- E类分级红线明确:将GB50013-2006明确列入"已废止→P0"清单,避免歧义
- B类时序逻辑补全:新增"完工早于总工期""验收超出计划工期"检测场景,全链路时序节点校验
- C类编号结构补全:章节跳段、目录正文不一致、表格标题与内容不匹配全部覆盖
- D类术语格式补全:术语混用(小/小型/小Ⅰ型水库、总投资/投资估算)、单位不统一、缺书名号全部覆盖
- E类检查完善:废止标准明确替代版本(SL303-2014→SL303-2017、SL166-2010→SL/T291.3-2025),HJ/T格式归一化
- 分级偏差修正:多年平均降雨量→P0,E类废止标准→P0,C类全→P1,D类全→P2
- 定位精度优化:段落索引与页码对应关系校准,location格式统一为"第X页第Y段"
- A类数据验算强化:资金分项自动求和、工程量单位校验
v2.4.5 - 2026-04-10
- 报告模板强化:模板开头添加【强制要求】所有章节不得遗漏,确保免责声明等必填项完整输出
- E类检查升级:同时检查标准号和标准名称是否匹配,防止"标准号正确但名称错误"的遗漏
- 部分章节检查提示:用户要求只检查部分章节时,提醒先另存并说明局限性
v2.4.4 - 2026-04-09
- E类规范核查流程升级:先查静态库 → 未收录则汇总询问用户是否联网核查 → 同意后逐条联网查询 → 自动写入
standards_library.json(归一化key入库) - clean_std 修复:HJ/T+数字/小数 → 归一化为 HJ+数字(如
HJ/T2.3-2018→HJ2.3-2018),同时保留 HJ/T88-2003 等例外原值匹配 - 前缀兜底查询:文档引用缺少年份时(如
GB50201、SL274),自动在库中查找同前缀标准,取最新年份;标注_inferred: True提示"建议核实年份" - 库新增2条:
SL/T 251-2015(天然建筑材料勘察规程,现行)、SL 303-2014(已废止,被SL 303-2017替代) - 静态库升至141条(现行有效115/已修订3/已废止23)
Scan to contact