原创度扫描(originality-scanner)
把「一段候选内容」与「可选的参考资料」做离线、确定性的原创度与相似度核算,
输出原创度评分、四档分级、逐维明细与提示。
纯标准库、不联网、不读工作区、不生成内容。
只做核算与检查,不构成抄袭认定、不替代人工审核、不是绕过 AI 检测的工具。
触发场景
- 「帮我扫一下这段的原创度」
- 「这篇是不是抄的 / 和参考资料雷同不雷同」
- 「发布前做个原创自查 / 我的脚本原创性够不够」
- 「这段文字 AI 味重不重 / 帮我查重」
- 自媒体运营、内容合规、编辑在发文前的第一道原创性分流
用法
# 直接传文本(无参考资料 → 只看自重复 + AI 痕迹)
python3 originality_scanner.py scan --text "一段待检内容"
# 候选文件 + 参考资料(查重)
python3 originality_scanner.py scan -i 候选.txt --ref 参考1.txt 参考2.md --min-sim 0.3
# 参考资料目录(目录下全部文件参与比对)
python3 originality_scanner.py scan -i 候选.txt --ref-dir ./资料库
# 机器可读 JSON
python3 originality_scanner.py scan -i 候选.txt --ref 参考.txt --json
# 规则目录 / 内置自测
python3 originality_scanner.py config
python3 originality_scanner.py validate
四档分级
| 档位 | 含义 | 触发 |
|---|---|---|
ORIGINAL |
原创,可放心使用 | 评分 ≥ 80 且语料相似 < 0.5 且自重复 < 0.3 |
REVIEW |
建议复核 | 60 ≤ 评分 < 80,或语料 0.3–0.5,或 AI 痕迹 ≥ 70 |
SIMILAR |
疑似雷同 | 40 ≤ 评分 < 60,或语料 0.5–0.7 |
NOT_ORIGINAL |
高度重复 | 评分 < 40,或语料相似 ≥ 0.7 |
退出码
0= 无高风险项(可能仍有 LOW 级提示)1= 存在待复核 / 雷同 / 高度重复 / 高 AI 痕迹等需人工处理项,或高等级告警2= 参数错误或文件不可读
三个扫描维度
- 自重复度:候选内部精确重复句 + SimHash 近重复句(海明距离 ≤ 3),算参与重复句占比。
- 语料相似度:候选句 vs 参考资料逐句字符 3-gram 余弦,取最大值;仅报告 ≥
--min-sim的命中。 - AI 痕迹(启发式):词汇多样性(TTR) + 句长突发性(CV) + 过渡/模糊词密度,合成 0–100 弱信号指数。
原创度评分公式
penalty = 0.6 × max(自重复比例, 语料最大相似度) + 0.4 × (AI痕迹指数 / 100)
评分 = round(100 × (1 - penalty)) # 钳制 [0, 100]
全部确定性计算,同输入同输出,可手算复现。
红线与边界
- 离线、纯标准库、不联网、不读工作区(仅读显式传入文件 / 标准输入)。
- 只做核算与检查:不构成抄袭认定、不替代人工审核、不是绕过 AI 检测的工具。
- AI 痕迹指数为弱信号,单条不可采信,仅作人工复核线索。
- 所有哈希走
hashlib,保证跨进程确定性(可复现)。