技术 · 2026年7月28日 0

标书工具箱说明

目前第一个功能,标书查重,后续尝试更新奇的功能。如质疑函等等

V1.0.0 标书工具发布 · 使用规则

【一、标书查重(本地运行)】

  1. “招标文件(可选)”:选择招标书,用于排除”照抄招标”句式,减少误报。
  2. “投标文件(必选)”:选择一个或多个投标书(.docx / .pdf / .doc / .wps)。
  3. “开始查重”:从元数据、目录、正文、图片、内部重复五个维度进行比对。

【二、导出与标注】
· “导出报告”:支持 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)

  1. 招标句式排除
    如果有招标文件,先把它拆成句子,建立“白名单”:
  • 归一化后完全相同的句子
  • 骨架键相同的句子(去掉数字/日期/金额后结构一样)
  • 投标文件中照抄招标的句子会被过滤掉,避免误报。
  1. 投标间精确重复
    把所有投标文件的句子归一化(去标点、空格、全角、小写)后,按哈希聚合。同一句话出现在 ≥2 份投标中 → 正文重复句(高)。
  • 过滤:
  • 短句(≤4 字符)忽略
    域代码残留(HYPERLINK、MERGEFIELD 等)忽略
    招标白名单句子忽略
  1. 投标间近似重复
    用 skeleton_key() 把句子里的数字、日期、金额统一替换为占位符,再聚合。骨架相同且出现在 ≥2 份投标中 → 正文近似重复(中)。
  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)

  1. 字段级一致
    两两比对以下字段,一致即计分: title、subject、description、keywords、creator、last_modified_by、company、category、version、revision、created、modified、last_printed、application
  2. 批量分析
    批量标记:同一 (creator, company) 出现在 ≥3 份文档
    时间聚类:创建/修改/打印时间集中在 10 分钟内
    罕见组合:同一 (title, creator, company, created) 在少量文档中重复