勘察设计标书查重助手
目标不是算出相似度,是回答一个问题:这几份文件是不是出自同一个人的同一份底稿。
一、依赖
本技能已内置所需方法论与脚本,路径均相对于本技能根目录(下文以 <skill_dir> 指代安装目录):
| 用途 | 路径 |
|---|---|
| 串标法定情形、三维检测法、勘察设计 12 处雷同点 | references/10-查重与同源检测.md |
| 查重脚本 | scripts/dedup_check.py |
包内构成
本技能自带完整工具箱,单独安装即可运行,不依赖其他技能或外部路径:
| 目录 | 内容 |
|---|---|
references/ |
17 个知识库 |
templates/ |
10 个模板 |
scripts/ |
7 个脚本 |
上表依赖节列出的是本流程会用到的部分;其余为关联能力(如接续其他阶段的产物),需要时可调用。
脚本仅依赖 Python 标准库;下列为可选项,缺失时相应功能降级并明确提示,不会崩溃:
| 依赖 | 用途 | 缺失后果 |
|---|---|---|
Pillow |
图片哈希、EXIF 检查 | 相关功能自动跳过并提示 |
完整能力:pip install pymupdf pdfplumber python-docx pillow numpy
二、两种模式,先问清是哪一种
| 模式 | 场景 | 判据倾向 | 命令 |
|---|---|---|---|
| 串标甄别 | 多家投标单位的标书互相比对 | 高相似=致命;有连续大段雷同即高危 | --mode collusion --matrix |
| 复用自查 | 我方本次稿 vs 我方历史库 | 高相似是正常的;要看的是张冠李戴(旧地名/旧业主/旧规模残留) | --mode reuse + check_bid.py --residue |
先问清楚是哪一种再动手。判反了:把自家复用当串标举报,或把串标当复用放过,后果都很严重。
三、四路检测(缺一路就漏)
python "…/dedup_check.py" ./各家标书 --mode collusion --matrix
| 路 | 查什么 | 高危信号 |
|---|---|---|
| 元数据 | 作者 / 最后修改者 / 公司 / 模板 | 不同投标人的文件里出现同一个作者名或公司名 |
| 文本 | 中文 4 字滑窗 Jaccard + 最长连续雷同块 | 连续 ≥80 字雷同;≥150 字几乎必然是同一底稿 |
| 图片 | word/media/* SHA256 + 像素尺寸 |
字节完全一致=直接复用;尺寸一致=须人眼核 |
| 报价 | 相邻差额/比值 | 等差或等比排列=电子平台直接甄别项 |
为什么不能只看相似度
短文本+工程通用词汇(勘察、场地、规范、地名)会让 Jaccard 虚高 15–25 个百分点。
实测:两家完全独立写法的标书相似度 36.4%,但最长连续雷同块 0 字——这不是同源。同期另三份文件相似度 99.6–100%、最长块 121–189 字,才是同源。
判定以最长连续雷同块为主判据:
| 条件 | 判定 |
|---|---|
| 相似度 ≥90% 或最长块 ≥300 字 | 极高风险 |
| 最长块 ≥150 字,或相似度 ≥60% 且最长块 ≥80 字 | 高风险 |
| 最长块 ≥80 字,或相似度 ≥60% | 中风险 |
| 相似度 ≥40% | 低风险 |
| 其余 | 未见同源 |
四、法律后果(说清楚才有威慑力)
《招标投标法实施条例》第 40 条:视为串通投标的情形,核心两条与本工具相关——
- (一)不同投标人的投标文件由同一单位或者个人编制;
- (四)不同投标人的投标文件异常一致或者投标报价呈规律性差异。
"视为"的意思是:推定成立,不需要证明主观故意。附随后果:中标无效、罚款、列入不良行为记录 1–3 年、情节严重吊销资质。
电子交易平台还会自动比对:文档作者、最后修改者、公司字段、制作机器码、MAC 地址、IP、报价规律。这些都在平台侧,不在投标人控制范围内。
五、执行流程
D1 定模式(串标甄别 / 复用自查)
D2 收文件 → 确认每家是"独立投标人"(母子/兄弟/挂靠/联合体各方独立标都算同一风险组)
D3 跑检测 → 元数据 → 文本 → 图片 → 报价
D4 逐条回原文核实(工具报的是线索,不是结论)
D5 出报告:矩阵 + 同源线索 + 雷同段落 + 报价规律 + 结论
D4 必须回原文的三类
- 元数据相同:核是否只是默认值(
Administrator、User、WPS、Normal.dotm已自动排除)。若真是同一姓名,查是谁——同一人代表两家单位编制,直接命中第 40 条(一)。 - 雷同段落:核是否属合法引用(规范条文、标准原文、招标文件给定格式、清单项目名称)。这类天然相似不算线索,可用
--ignore 剔除词.txt排除。 - 图片相同:核是否公共素材(政府公开图、规范图集插图)还是各自绘制的成果图。
六、报告结构
| 节 | 内容 |
|---|---|
| 一、文件清单 | 每家投标人、文件名、页数、字数 |
| 二、元数据交叉表 | 按文件对列出相同字段(作者/公司/模板) |
| 三、相似度矩阵 | N×N 表,一眼看出谁和谁最像 |
| 四、雷同段落清单 | 逐对列出连续块长度、起止位置、原文摘录 |
| 五、图片同源 | 相同哈希的图片、相同尺寸的图片 |
| 六、报价规律 | 差额/比值,是否等差等比 |
| 七、结论与处理建议 | 分级:极高/高/中/低/未见同源 |
每条结论必须写明依据条款与可回查定位(哪个文件、第几字、连续多少字)。
七、三条边界(写在报告里)
- 本工具不提供规避电子平台甄别的方法,不做洗稿。 发现同源应如实处理——换词改句改变不了机器码、文档属性、报价规律。
- 相似不等于串标。 规范条文、通用工艺描述、清单项目名称天然相似;判断要回原文,不能一键定性。
- 查重结论不能替代法律判断。 报告给的是技术线索与条款依据,最终认定权在行政监督部门与评标委员会。
八、常见误判(实测踩过)
| 误判 | 原因 | 纠正 |
|---|---|---|
| 独立标书被判 36% 高风险 | 只看 Jaccard,短文本虚高 | 加最长连续雷同块维度 |
| 把"模板 Normal.dotm 一致"当证据 | 默认值未过滤 | 排除 normal、normal.dotm、administrator 等 |
| 把"南部县""西充县"当成"南充"的错字 | 中文无词边界,形近地名误配 | 地名异写检查要求正确写法至少出现 1 次 |
| 把历史复用误判为串标 | 模式选错 | 先问:这几份是不是不同投标人 |