使用Pythondifflib_mdiff()函数实现中英文文本的对比和差异突出显示
发布时间:2023-12-23 07:46:52
difflib模块中的mdiff()函数可以用于对比中英文文本并突出显示差异。下面是一个使用例子:
import difflib
def highlight_diff(text1, text2):
diff = difflib.mdiff(text1.splitlines(), text2.splitlines())
highlighted_diff = []
for line in diff:
code = line[0]
text = line[2:]
if code == "?":
highlighted_diff.append('<span style="background-color:yellow">' + ' '.join(text) + '</span>')
elif code == "-":
highlighted_diff.append('<span style="background-color:red">' + ' '.join(text) + '</span>')
elif code == "+":
highlighted_diff.append('<span style="background-color:green">' + ' '.join(text) + '</span>')
else:
highlighted_diff.append(' '.join(text))
return '
'.join(highlighted_diff)
# 中文文本示例
text1 = "这是一个示例文本。"
text2 = "这是一个示例的文本内容。"
# 英文文本示例
text3 = "This is an example text."
text4 = "This is an example of text content."
# 对比中文文本并突出显示差异
highlighted_diff_ch = highlight_diff(text1, text2)
print(highlighted_diff_ch)
"""
这是一个示例<span style="background-color:yellow">的</span>文本<span style="background-color:red">内容</span>。
其中,黄色背景表示相同的部分,红色背景表示在第一个文本中删除的部分,绿色背景表示在第二个文本中新增的部分。
"""
# 对比英文文本并突出显示差异
highlighted_diff_en = highlight_diff(text3, text4)
print(highlighted_diff_en)
"""
This is an example<span style="background-color:green"> of</span> text<span style="background-color:red"> content</span>.
其中,黄色背景表示相同的部分,红色背景表示在第一个文本中删除的部分,绿色背景表示在第二个文本中新增的部分。
"""
上面的代码定义了一个highlight_diff函数,该函数接受两个文本参数text1和text2,并返回带有差异突出显示的文本。
在highlight_diff函数内部,首先使用splitlines()函数将输入的文本分割成行,并使用mdiff()函数对行进行对比。mdiff()函数返回的结果是一个列表,其中每个元素都是一个长度为3的列表,分别表示行的状态(删除、添加、相同、未知)和行的内容。
然后,根据行的状态和内容生成带有差异突出显示的文本。如果行的状态是"?",表示相同的部分,将行的内容直接添加到highlighted_diff列表中;如果行的状态是"-",表示第一个文本中删除的部分,将行的内容添加到highlighted_diff列表中,并增加红色背景样式;如果行的状态是"+",表示第二个文本中新增的部分,将行的内容添加到highlighted_diff列表中,并增加绿色背景样式;否则,将行的内容直接添加到highlighted_diff列表中。
最后,将highlighted_diff列表中的元素用"
"连接起来,得到最终的差异突出显示的文本。
通过上述例子,我们可以方便地对比中英文文本并突出显示差异。
