diff 算法的目标不是理解文本含义,而是找出两个序列里哪些部分相同,哪些部分发生了变化。
基本思路
- 先把文本拆成行、词或字符。
- 寻找两份内容中可以对齐的共同部分。
- 共同部分之间的缺口标记为新增或删除。
- 相邻的删除和新增通常可以被展示为修改。
- 最后把结果渲染成高亮视图。
行级、词级、字符级有什么区别?
| 粒度 | 适合内容 | 特点 |
|---|---|---|
| 行级 | 日志、配置、列表 | 速度快,结构清楚 |
| 词级 | 文案、说明、句子 | 能看出一句话里改了哪个词 |
| 字符级 | 短字符串、标识符 | 很细,但长文本会显得碎 |
| 结构化 | JSON、对象数据 | 按字段路径比纯文本更准确 |
很多 diff 实现会使用最长公共子序列或类似策略。它们尽量保留共同内容,再用最少的插入和删除说明变化。