Sha*_*e H 18 html python algorithm diff html-parsing
我将要完成的内容的描述:
扩大最后一点:
想象一下,同一网站的两个页面都共享一个侧边栏,这可能是一个已被复制/粘贴的共同祖先.每个页面都对侧边栏进行了一些小的更改.差异将揭示这些变化,然后我可以"向上"DOM以找到它们共享的第一个公共块元素,或者只是默认为<body>
.在这种情况下,我想把它抬起来发现,哦,他们有一个共同点<div id="sidebar">
.
我熟悉DaisyDiff,应用程序类似 - 在CMS世界中.
我也开始玩google diff-patch库了.
我想问一下这种非特定的问题,希望能够征求任何人认为可能有用的建议或指导.目前,如果你把枪放在我的头上并说"CODE IT"我会用Python重写DaisyDiff并加入这个块级逻辑.但我想也许有更好的方法,任何人的答案都有渲染HTML的差异算法?让我感到温暖和模糊.
如果你要从头开始,一个有用的搜索词将是"树差异".
有一个相当真棒博客张贴在这里,但我只是觉得通过谷歌搜索"daisydiff蟒",所以我敢打赌,你已经看过了.除了所有有趣的理论内容之外,他还提到了Logilab的xmldiff
存在,这是一种用Python编写的开源XML.这可能是一个不错的起点 - 可能不如试图包装或重新实现DaisyDiff更正确,但可能更容易起床和快速运行.
在pypi 上还有html-tree-diff,我通过这个Quora链接找到了它:http://www.quora.com/Is-there-any-good-Python-implementation-of-a-tree-diff-algorithm
关于树的有效差分算法和 cstheory.stackexchange上的Levenshtein距离有一些关于树差异的理论知识.
顺便说一句,为了澄清,你在谈论扩展两个DOM树,但不一定将diff/merge渲染回任何特定的HTML,对吧?(编辑:是的.)这里有很多类似措辞的问题,实际上是在问"我怎样才能将删除的线条变成红色并添加绿线"或"如何使匹配的段落在视觉上排列",跳过理论"如何首先区分两个DOM树"的难点部分以及"如何在此之前将可能格式错误的HTML解析为DOM树"的实际难点部分.:)