Python中高效实现文本对比的超全实战教程
前言
在工作中我们经常需要文本对比场景:
- 对比两份文档、配置文件差异
- 自动化测试校验返回文本变更
- 文本查重、模糊匹配相似度
- 自动找出哪里删改、哪里新增
Python 内置强大的文本比对工具,无需复杂算法,几行代码即可实现专业级文本对比。
本篇博客涵盖:精准逐行对比、差异可视化、文本相似度计算、模糊匹配,全部可直接运行。
一、最简单对比:精准全等判断
适合场景:只判断是否一模一样,不需要看差异
代码示例
a = "今天学习Python文本对比" b = "今天学习Python文本对比" c = "今天学习Python教程" print(a == b) # True print(a == c) # False
业务常用:忽略大小写/空格
def clean_text(s):
return s.replace(" ","").lower()
print(clean_text(a) == clean_text(c))
优点:超快、零依赖
缺点:看不到具体哪里不一样
二、专业对比:Python内置 difflib(查看详细差异)
Python 自带 difflib 标准库,是文本对比神器,可以精准输出:
- 删除的行
- 新增的行
- 修改的内容
逐行文本差异对比
import difflib
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对比页面,带颜色高亮,可直接浏览器打开。
import difflib
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="新文本"
)
with open("diff.html","w",encoding="utf-8") as f:
f.write(html)
print("对比网页已生成!")
运行后打开 diff.html,即可看到:
- 红色:删除内容
- 绿色:新增内容
- 左右分栏对比
非常适合工作汇报、自动化测试报告。
四、文本相似度对比(查重、模糊匹配)
很多场景不是判相等,而是判相似度,例如文章查重、语句匹配。
代码实现
import difflib
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
安装
pip install fuzzywuzzy python-Levenshtein
代码
from fuzzywuzzy import fuzz 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 | 超强模糊匹配 | 文案、短句查重匹配 |
总结
- 精准一致判断直接用
== - 需要看差异、改了哪里用内置
difflib - 需要可视化报告用 HtmlDiff 生成网页
- 查重、模糊匹配用 SequenceMatcher / fuzzywuzzy
Python 文本对比完全可以零算法基础实现,覆盖 99% 工作场景。
到此这篇关于Python中高效实现文本对比的超全实战教程的文章就介绍到这了,更多相关Python文本对比内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解Numpy数组转置的三种方法T、transpose、swapaxes
这篇文章主要介绍了详解Numpy数组转置的三种方法T、transpose、swapaxes,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-05-05
Python机器学习从ResNet到DenseNet示例详解
ResNet极大地改变了如何参数化深层网络中函数的观点。稠密连接网络(DenseNet)在某种程度上是ResNet的逻辑扩展。让我们先从数学上了解下2021-10-10
pandas基础 Series与Dataframe与numpy对二进制文件输入输出
这篇文章主要介绍了pandas基础Series与Dataframe与numpy对二进制文件输入输出,series是一种一维的数组型对象,它包含了一个值序列和一个数据标签2022-07-07


最新评论