You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取Levenshtein距离所对应的具体差异内容?

获取Levenshtein距离对应的具体差异内容

好问题!Levenshtein距离本身确实只返回两个字符串间差异的数量,但要获取具体的差异片段(比如你例子里的new),完全有现成的工具可以直接用,不用自己费劲结合ndiff造轮子。下面给你两种实用的方案:

1. 用Python标准库difflib提取差异(无需额外安装)

你提到的ndiff其实已经是Python标准库的一部分,我们可以直接用它来解析并提取具体的插入、删除内容。针对你的例子,代码如下:

import difflib

a = "MyTest"
b = "MynewTest"

# 按字符级别对比两个字符串
diff_result = difflib.ndiff(list(a), list(b))

# 提取所有插入的内容片段
inserted_parts = []
for line in diff_result:
    # 以"+ "开头的行代表目标字符串新增的内容
    if line.startswith('+ '):
        inserted_parts.append(line[2:])

# 拼接成完整的新增字符串
print(''.join(inserted_parts))  # 输出: new

这个方法的好处是不用装额外依赖,而且能清晰看到每一处差异的类型(+是插入,-是删除,?是差异标记)。

2. 用python-Levenshtein库精准获取编辑操作

如果你需要更高效、更精准的编辑操作解析,可以用python-Levenshtein这个第三方库(它底层是C实现,速度比纯Python方案快很多)。首先先安装:

pip install python-Levenshtein

然后用它的editops函数获取具体的编辑操作,再提取差异内容:

from Levenshtein import editops

a = "MyTest"
b = "MynewTest"

# 获取所有编辑操作,每个操作是(类型, 原字符串位置, 目标字符串位置)
operations = editops(a, b)

inserted_content = []
for op, i, j in operations:
    # 筛选出"插入"类型的操作,提取对应的字符
    if op == 'insert':
        inserted_content.append(b[j])

print(''.join(inserted_content))  # 输出: new

这个方法返回的操作序列非常精准,除了insert,还能识别delete(删除)和replace(替换)类型的操作,方便你针对不同差异类型做处理。

总结

  • 如果你不想装第三方库,difflib.ndiff完全能满足需求;
  • 如果追求性能和精准的操作解析,python-Levenshtein是更优选择。

内容的提问来源于stack exchange,提问作者unter_983

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:38:12