三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Python 如何做文本对比?超全实战教程(精准比对+相似度+可视化差异)

Python 如何做文本对比?超全实战教程(精准比对+相似度+可视化差异)

前言

在工作中我们经常需要文本对比场景:

  • 对比两份文档、配置文件差异
  • 自动化测试校验返回文本变更
  • 文本查重、模糊匹配相似度
  • 自动找出哪里删改、哪里新增

Python 内置强大的文本比对工具,无需复杂算法,几行代码即可实现专业级文本对比。

本篇博客涵盖:精准逐行对比、差异可视化、文本相似度计算、模糊匹配,全部可直接运行。


一、最简单对比:精准全等判断

适合场景:只判断是否一模一样,不需要看差异

代码示例

a="今天学习Python文本对比"b="今天学习Python文本对比"c="今天学习Python教程"print(a==b)# Trueprint(a==c)# False

业务常用:忽略大小写/空格

defclean_text(s):returns.replace(" ","").lower()print(clean_text(a)==clean_text(c))

优点:超快、零依赖
缺点:看不到具体哪里不一样


二、专业对比:Python内置 difflib(查看详细差异)

Python 自带difflib标准库,是文本对比神器,可以精准输出:

  • 删除的行
  • 新增的行
  • 修改的内容

2.1 逐行文本差异对比

importdifflib text1="""第一行内容 第二行内容 第三行内容 """text2="""第一行内容 第二行【已修改】 第三行内容 第四行新增内容 """# 分割成行lines1=text1.splitlines(keepends=True)lines2=text2.splitlines(keepends=True)diff=difflib.Differ()result=diff.compare(lines1,lines2)print("".join(list(result)))

输出标识说明

  • -旧文本存在、新文本删除
  • +新文本新增内容
  • 无符号:内容一致

三、生成可视化对比网页(超实用)

difflib可以一键生成HTML对比页面,带颜色高亮,可直接浏览器打开。

importdifflib text1="""1、Python基础 2、Python爬虫 """text2="""1、Python基础 2、Python数据分析 3、Python人工智能 """diff=difflib.HtmlDiff()html=diff.make_file(text1.splitlines(),text2.splitlines(),fromdesc="旧文本",todesc="新文本")withopen("diff.html","w",encoding="utf-8")asf:f.write(html)print("对比网页已生成!")

运行后打开diff.html,即可看到:

  • 红色:删除内容
  • 绿色:新增内容
  • 左右分栏对比

非常适合工作汇报、自动化测试报告


四、文本相似度对比(查重、模糊匹配)

很多场景不是判相等,而是判相似度,例如文章查重、语句匹配。

代码实现

importdifflib s1="Python文本对比教程"s2="Python文本比对教程"s3="Java开发教程"m1=difflib.SequenceMatcher(None,s1,s2)m2=difflib.SequenceMatcher(None,s1,s3)print("s1-s2 相似度:",round(m1.ratio(),2))print("s1-s3 相似度:",round(m2.ratio(),2))

输出:

s1-s2 相似度: 0.92 s1-s3 相似度: 0.15

可以结合阈值实现智能查重

  • 相似度>0.8:判定为高度相似
  • 相似度<0.3:判定为完全不同

五、高级模糊匹配(fuzzywuzzy)

原生库精度有限,工业级模糊匹配推荐fuzzywuzzy

安装

pipinstallfuzzywuzzy python-Levenshtein

代码

fromfuzzywuzzyimportfuzz a="我喜欢Python文本对比"b="我非常喜欢Python文本对比技术"print(fuzz.ratio(a,b))# 整体相似度print(fuzz.partial_ratio(a,b))# 局部匹配print(fuzz.token_sort_ratio(a,b))# 无序词语匹配

适合:短句对比、文案查重、OCR文本比对、搜索匹配。


六、各种对比方案选型总结

方案特点适用场景
字符串 ==极速精准简单一致校验
difflib.Differ查看行差异文档/代码对比
difflib.HTML可视化对比生成对比报告
SequenceMatcher相似度打分简单查重
fuzzywuzzy超强模糊匹配文案、短句查重匹配

总结

  1. 精准一致判断直接用==
  2. 需要看差异、改了哪里用内置difflib
  3. 需要可视化报告用 HtmlDiff 生成网页
  4. 查重、模糊匹配用 SequenceMatcher / fuzzywuzzy

Python 文本对比完全可以零算法基础实现,覆盖 99% 工作场景。


← 返回列表