如何获取两个字符串之间的更改(插入,删除或相同)?

时间:2016-11-02 12:19:48

标签: javascript c# algorithm levenshtein-distance

我使用Levenshtein算法的实现来获取两个字符串之间的距离,但我真正需要的是第二个字符串中的哪些(索引)发生插入或删除或保持不变?
是否有任何实现在JavaScript(或其他C#)中执行此操作?

1 个答案:

答案 0 :(得分:0)

Google提供了Diff Match和Patch库,其中包含强大的算法来执行您要求的任务。这些库可用于Java,JavaScript,Python,C ++,C#,Objective-C,Lua和Dart。

  1. 差异: Diff需要两个文本并找出差异。此实现在逐个字符的基础上工作。任何差异的结果都可能包含“糠”,无关的小共性会使输出复杂化。后差异清理算法可以解决这些微不足道的共性。
  2. 匹配:匹配在较大的文本中查找模式。这种匹配的实现是模糊的,这意味着即使模式包含错误并且与文本中找到的内容不完全匹配,它也可以找到匹配。此实现还接受预期位置,在该位置附近应找到匹配。基于a)模式和文本之间的拼写差异的数量和b)候选匹配与预期位置之间的距离来对候选匹配进行评分。匹配距离参数设置这两个指标的相对重要性。
  3. 补丁:两个文本可以相互区分,生成补丁列表。然后可以针对第三文本应用这些补丁。如果第三个文本有自己的编辑,则此版本的修补程序将尽最大努力应用其更改,报告哪些修补程序成功,哪些修补程序失败。
  4. 您可以从here了解详情。