比较两版 AI 草稿时,只看最后一版容易遗漏被删掉的条件。先按句子切分旧稿与新稿,再输出逐句的保留、删除和新增位置,让编辑返回原文核对“为什么改”;本例专门发现一个金额条件从第二版消失。
准备与运行
本文只使用人工构造的教学材料,没有把示例结果当作真实项目效果。以下代码在 Windows 的 Python 3.11 独立环境执行通过。先在空目录运行安装命令,再将完整代码保存为 demo.py,执行 python demo.py。

python --version # 只用 Python 标准库
先锁定两份版本,保留顺序
教学旧稿有三句:公布计划、限制预算、安排审核。新稿保留首句,删除“预算不得超过12万元”,又加了交付日期。两份文字完全由作者虚构;脚本在内存中比较,不连接在线写作工具。正式审稿应保存来源文件和版本时间,防止比对期间一方再次被编辑。
difflib.SequenceMatcher 比较的是句子序列。它会根据相同句子寻找对应关系,并把连续变化标为 equal、replace、delete 或 insert。文字轻微改写可能被视为整句 replace;代码不会判断哪一版事实正确,编辑要回到原始资料。
条件被删应单独复核
结果里找出含“预算”的旧句是否还留在新稿。若预算上限是业务承诺,删除这句话前必须核对原作者和证据;不能把“改写更简洁”当作删除条件的理由。
如果长文有标题、表格、脚注,单纯按句号切分会失真。可先分块并保留段落 ID,再做句级差异;换序、同义改写和数字近似都需要人工检查。
完整代码
import difflib, re
old = "项目公布了测试计划。预算不得超过12万元。团队将安排人工审核。"
new = "项目公布了测试计划。团队将安排人工审核。交付日期为10月5日。"
def sentences(text):
return [part for part in re.split(r"(?<=[。!?])", text) if part.strip()]
a,b = sentences(old),sentences(new)
matcher = difflib.SequenceMatcher(None,a,b,autojunk=False)
for tag,i,j,k,l in matcher.get_opcodes():
if tag == "equal": continue
print(tag,"old",a[i:j],"new",b[k:l])
deleted_conditions = [s for s in a if "预算" in s and s not in b]
print("deleted_budget_conditions",deleted_conditions)
assert deleted_conditions == ["预算不得超过12万元。"]
assert a[0] == b[0]
运行结果与核对
下面是上述脚本在本地执行得到的输出;正式数据请按相同检查点复核。
delete old ['预算不得超过12万元。'] new []
insert old [] new ['交付日期为10月5日。']
deleted_budget_conditions ['预算不得超过12万元。']
核对输出中 deleted_budget_conditions 保留了完整旧句,并能在差异行看到新增的交付日期。编辑下一步对照原计划确认预算条件是否仍有效,再决定恢复旧句、解释变更或接受删除。
适用边界
这是逐句精确比对,不是抄袭检测或语义相似度判断;同义改写、句子拆合及段落换序可能造成大片差异。虚构金额和日期不代表实际项目。
常见问题
为什么轻微改写会显示整句替换?
本例的比较单位是句子,任何字符变化都会使整句不完全相同。需要细看该句时,可再对旧句和新句运行字符级差异。
参考资料
以下官方资料已于 2026 年 10 月 1 日核对,分别用于确认文中接口或方法定义。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31739.html