Questions tagged «diff»

1
灵活实施DIFF的启发式方法
我创建了一个DIFF实现,以比较工作中的文档修订。它基于O(ND)差分算法及其变体。 变得很重要的一件事是获取更改列表并将其解释为人类可读的文本。尽管当前算法非常有效,但它是如此之大,以至于难以扩展。 简短问题 我当时正在考虑尝试使用A *和一种启发式方法,该方法会增加“转弯”的惩罚。想法是消除不必要的“添加,删除,添加,删除,添加,删除”,以便更轻松地解析为人类可以阅读的内容。基本上,将我的最短路径问题变成最简单的路径问题。 当然,不要创建始终为“删除所有内容,添加所有内容 ”的输出 听起来合理吗? 在DIFF实现中使用启发式算法是否有优先权?什么是启发式? 问题: 如果删除了一个长句子,又删除了另一个长句子,但它们确实共享至少一个单词,请说“与”。不理会常见单词(不要同时添加和删除它)将创建最短路径。但是,这实际上只是使尝试混淆更改打印内容的人感到困惑。 当前DIFF的示例: 旧文本: 清洁:用力洗净并用车间空气吹干。 新文本: 清洁:用丙酮和无绒布擦拭。 变更单清单: 将“强力清洗并吹干”更改为“用丙酮擦拭” 将“商店空气”更改为“丙酮和无绒布” 注意:使用“更改”代替 “删除'购买空气',添加'丙酮'” 如您所见,第二个注释失去了所有上下文,并且在没有查看完整的旧文本和新文本集的情况下,您无法理解其含义。 关于标点符号的注意事项: 我将标点符号分隔为单独的“单词”,这样我就可以 添加“(” 代替 将“修复”更改为“((修复) 因为这令人讨厌。但是,这意味着如果两个文本中甚至有一个逗号(与前面示例中的单词“ with”相对),就会发生相同的情况。 可能的解决方案: 我认为我可以使用不同的路径查找算法,从而使我能够灵活地为可能对人更有意义的不同更改“路径”增加权重。也许,我什至可以使旅行到包含标点符号的节点的权重很小(不确定这将如何影响其他事情)。 然后,我可以得到前面的示例以列出以下内容: 变更单清单: 将“ Powerwash并用商店空气吹干”更改为“用丙酮和不起毛的布擦拭” 看到!更清晰! 我知道我会在性能上受到打击,并且可能必须对程序进行大刀阔斧的检修,但是获得所需的最终结果更为重要。 底线: 同样,在DIFF实现中使用启发式方法是否有优先次序,这是什么? 其他想法?合理的时间投入?还有其他想法吗?其他算法? 提前致谢! 编辑: 我试图澄清/巩固我的问题,并推广我的问题,以在我的算法中添加启发式方法,而不是使用A *。在这种情况下,基本上是相同的事情,但是我现在仍然认为更准确。 这篇文章很有见地。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.