fix(check): 修留出集暴露的 5 处(规则集 2026.11-r3)

- 响应方式:「逐条响应」要说的是要求 / 参数 / 偏离,声明函填写说明不算;「否则视为无效响应」不算默认接受
- 偏离栏按「是不是明确满足」判断:偏离栏、响应情况栏一起看,其他短写法请人核对(最高重要);表体序号认「技-86」等
- 另报价、附加条件按结构判断(另一个不同的总价金额、保留 / 另行 / 调整报价等)
- 空白栏:「精确到年月日」不算没填
- 比对时折叠异体字(戶→户等),原文照存
- 记录决策 E2:先修再跑国动真实投标文件

开发集召回 75%、规矩投标文件问题数不变;留出集参考数字见 check-eval §12(已看过,仅参考)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-04 20:34:12 +08:00
parent fee1c0f842
commit 902a130c82
13 changed files with 436 additions and 70 deletions

View File

@@ -39,6 +39,19 @@ RADICAL_SUPPLEMENT = dict(
)
# 同一个字的异体码位:有的字体把「户」输出成「戶」(U+6236),招标侧、投标侧字形不一致时检索和引文核对会对不上
# (留出集渲染出的 PDF 就是这样,check-eval §11)。只在比对时折叠(norm),原文照存,和已存的文字层保持一致
VARIANTS = str.maketrans(dict(zip("戶戸內靑淸眞卽旣敎", "户户内青清真即既教", strict=True)))
def fold(s: str) -> str:
"""比对用:异体码位、CJK 兼容汉字(U+F900–FAFF)换成常用写法。"""
s = s.translate(VARIANTS)
if any("\uf900" <= c <= "\ufaff" for c in s):
s = "".join(unicodedata.normalize("NFKC", c) if "\uf900" <= c <= "\ufaff" else c for c in s)
return s
def _char(t: str) -> str:
"""有的 PDF(如 Chromium 生成的)把汉字映射成康熙部首或部首补充区的码位(「目」成了 U+2F6C)。
只把这两个区换回常用汉字;全角标点等其他字符保持原样,否则引文和原文对不上。"""
@@ -369,4 +382,5 @@ def continuations(sentences: list[Sentence]) -> dict[str, Sentence]:
def norm(s: str) -> str:
return WS.sub("", s)
"""比对用的文本:去空白、折叠异体字(fold)。"""
return fold(WS.sub("", s))