gpt4 book ai didi

python - 构建 HTML Diff/Patch 算法

转载 作者:IT老高 更新时间:2023-10-28 21:04:32 24 4
gpt4 key购买 nike

描述我将要完成的工作:

  • 输入 2(N 不是必需的)HTML 文档。
  • 标准化 HTML 格式
  • 区分这两个文档——外部样式并不重要,但文档内联的任何内容都将包括在内。
  • 在 HTML block 元素级别确定增量。

扩展最后一点:

想象一下同一个网站的两个页面,它们共享一个侧边栏,而这可能是一个共同的祖先,已经被复制/粘贴了。每个页面的侧边栏都有一些小的变化。 diff 会显示这些变化,然后我可以“遍历” DOM 以找到它们共享的第一个公共(public) block 元素,或者只是默认为 <body> .在这种情况下,我想走过去发现,哦,他们有一个共同的<div id="sidebar"> .

我对 DaisyDiff 很熟悉,并且该应用程序与 CMS 世界中的应用程序类似。

我也开始使用 google diff-patch 库。

我想提出这种非具体的问题,希望能征求任何人认为可能有帮助的建议或指导。目前,如果您用枪指着我说“编写代码”,我会用 Python 重写 DaisyDiff 并添加这个 block 级逻辑。但我想也许有更好的方法和 Anyone have a diff algorithm for rendered HTML? 的答案让我感到温暖和模糊。

最佳答案

如果您要从头开始,一个有用的搜索词是“tree diff”。

有一篇非常棒的博文 here ,虽然我只是通过谷歌搜索“daisydiff python”找到了它,所以我敢打赌你已经看过了。除了所有有趣的理论内容外,他还提到了 Logilab's xmldiff 的存在。 ,一个开源的 XML 不同,用 Python 编写。这可能是一个不错的起点——可能不如尝试包装或重新实现 DaisyDiff 正确,但可能更容易快速启动和运行。

还有html-tree-diff在 pypi 上,我通过这个 Quora 链接找到:http://www.quora.com/Is-there-any-good-Python-implementation-of-a-tree-diff-algorithm

efficient diff algorithm for trees and Levenshtein distance 上有一些关于树差异的理论知识。在 cstheory.stackexchange 上。

顺便说一句,为了澄清,您是在谈论区分两个 DOM 树,但不一定将 diff/merge 渲染回任何特定的 HTML,对吗? (编辑:对。) 这里很多措辞相似的问题实际上是在问“我如何将删除的行涂成红色并将添加的行涂成绿色”或“如何使匹配的段落在视觉上对齐”,跳过了“我如何首先区分两个 DOM 树”的理论困难部分和“我如何在此之前将可能格式错误的 HTML 解析为 DOM 树”的实际困难部分。 :)

关于python - 构建 HTML Diff/Patch 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com