目前第一个功能,标书查重,后续尝试更新奇的功能。如质疑函等等
V1.0.0 标书工具发布 · 使用规则
【一、标书查重(本地运行)】
- “招标文件(可选)”:选择招标书,用于排除”照抄招标”句式,减少误报。
- “投标文件(必选)”:选择一个或多个投标书(.docx / .pdf / .doc / .wps)。
- “开始查重”:从元数据、目录、正文、图片、内部重复五个维度进行比对。
【二、导出与标注】
· “导出报告”:支持 HTML / Word / Excel / JSON(默认 HTML)。
· “标注源文件”:为涉及重复的 Word/WPS 生成 <原名>_标注.docx 副本,重复内容高亮提示;原文件不会被修改。
【三、AI 分析结果】
· 先在”设置”→”大模型设置”中配置 API Base URL、API Key 和模型名称。
· 点击后会将当前查重结果 JSON 提交到大模型分析高风险项。
· 分析结果可导出为 HTML;查重结果会上传至你配置的 AI 接口,请注意数据安全。
【四、检查更新】
· 启动后自动检查更新,标题栏右侧显示状态:
绿色=最新 / 黄色=有新版 / 红色=连接失败 / 灰色=今日已检查
【五、注意事项】
· 查重完全本地运行,原文档不会上传。
· 首次解析较慢属正常,已解析文件会缓存加速。
· 标注与 AI 分析结果仅供参考,正式投标请人工复核。
查重详解
目前查重算法是多维度流水线,从文档解析到风险评分分五步:
一、文档解析(docparse/)
把输入文件统一转成结构化字典:
格式 处理方式
.docx python-docx 直接读段落、标题、图片、元数据
.pdf pdfplumber 按页提取文本
.doc/.wps 调用系统 antiword 转成文本,再按段落切分
.txt 直接读取
解析阶段现在用 ProcessPoolExecutor 并行处理多文件。
二、正文查重(content.py)
- 招标句式排除
如果有招标文件,先把它拆成句子,建立“白名单”:
- 归一化后完全相同的句子
- 骨架键相同的句子(去掉数字/日期/金额后结构一样)
- 投标文件中照抄招标的句子会被过滤掉,避免误报。
- 投标间精确重复
把所有投标文件的句子归一化(去标点、空格、全角、小写)后,按哈希聚合。同一句话出现在 ≥2 份投标中 → 正文重复句(高)。
- 过滤:
- 短句(≤4 字符)忽略
域代码残留(HYPERLINK、MERGEFIELD 等)忽略
招标白名单句子忽略
- 投标间近似重复
用 skeleton_key() 把句子里的数字、日期、金额统一替换为占位符,再聚合。骨架相同且出现在 ≥2 份投标中 → 正文近似重复(中)。 - 单文档内部重复(compare_internal)
同一段落在同一文档中出现多次 → 内部重复(中)
同一句式但数字不一致(如“工期 30 天” vs “工期 60 天”)→ 内部重复(低)
三、目录查重(outline.py)
从 Word 标题样式(Heading 1/2/3…)提取大纲,进行三层比对:
| 检测 | 算法 | 输出 |
| 标题语义相似 | LCS + 骨架编辑距离 + 关键词 Jaccard + 前缀奖励 | 识别“项目概述”≈“项目简介” |
| 树结构相似 | 重建标题树,递归近似树编辑距离 | 识别章节合并/拆分 |
| 章节顺序 | 带权 LCS 序列比对 | 识别章节顺序调整 |
| 骨架精确匹配 | 去编号/停用词后完全匹配 | 最强信号 |
四、图片查重(images.py)
仅做 MD5 像素级匹配:
提取所有投标文件内嵌图片的 MD5
同一 MD5 出现在 ≥2 份投标中 → 图片完全相同(高)
目前是精确匹配,还没有做感知哈希(pHash),所以缩放/裁剪过的相同图片会漏掉。
五、元数据查重(metadata.py)
- 字段级一致
两两比对以下字段,一致即计分: title、subject、description、keywords、creator、last_modified_by、company、category、version、revision、created、modified、last_printed、application - 批量分析
批量标记:同一 (creator, company) 出现在 ≥3 份文档
时间聚类:创建/修改/打印时间集中在 10 分钟内
罕见组合:同一 (title, creator, company, created) 在少量文档中重复