Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在给定起始节点和近似路径的树中查找具有特定属性的节点的算法_Html_Algorithm_Dom_Graph_Graph Algorithm - Fatal编程技术网

Html 在给定起始节点和近似路径的树中查找具有特定属性的节点的算法

Html 在给定起始节点和近似路径的树中查找具有特定属性的节点的算法,html,algorithm,dom,graph,graph-algorithm,Html,Algorithm,Dom,Graph,Graph Algorithm,我正在寻找一种逻辑,它可以预测特定元素在特定页面的DOM中的位置,因为我们知道元素的一些一般属性,以及从模板中的几个固定节点到元素的近似路径(通过分析几个类似类型的页面获得) 具体示例: 有几个维基百科页面需要分析: 等 . . 在以下条件下,算法必须在这些页面中获得正确的导航框(class=“vertical navbox nowraplinks plainlist”): 元素的类名可能在所有页面中都不相同 从页眉(id=“firstHeading”)和一些其他固定节点到导航框的路径在几

我正在寻找一种逻辑,它可以预测特定元素在特定页面的DOM中的位置,因为我们知道元素的一些一般属性,以及从模板中的几个固定节点到元素的近似路径(通过分析几个类似类型的页面获得)

具体示例:

有几个维基百科页面需要分析:

等 . .

在以下条件下,算法必须在这些页面中获得正确的导航框(
class=“vertical navbox nowraplinks plainlist”
):

  • 元素的类名可能在所有页面中都不相同
  • 从页眉(
    id=“firstHeading”
    )和一些其他固定节点到导航框的路径在几页(测试用例)中可用
  • 标题(和其他固定节点)在每个页面中始终具有相同的id
  • 某些页面的路径中可能有一些额外的节点(
    class=“hatnote”
    在第二个链接中)
  • 已知该框的一些属性(蓝色、表格等)

  • 有没有一种算法可以实现这一目的?

    那么,让我们做一些假设,看看它们是否与您的情况相符

    假设您有一个测试页面,在该测试页面中,您可以进行完整的dom树访问

    在这种情况下,我们可以做一系列的反向路径行走,从每个叶到根,假设一个节点在开始时的分数为0,如果我们找到的分支包含想要的节点,则加上+1

    在我们对从叶子到根的所有可能路径执行此操作之后,我们进行另一次完整访问,将之前计算的分数除以每个节点的子节点(子树或叶子)数量

    这意味着,对于每个节点,现在有一个百分比告诉您该节点的随机子树包含所需节点的概率

    现在,对于预测部分,您需要某种方法将另一个页面中的一个节点与您具有概率的一个节点进行匹配(对于这一点,我恐怕不知道如何实现)

    一旦您有了这样一个匹配,并且假设测试页面确实是预测性的,那么您将自动为新页面的每个节点设置一个概率因子,该概率因子应该是有意义的,尽管有任何可能的中间附加节点

    请注意,使用匹配算法,您可以对多个测试页面执行相同的计算,并在每个过程结束时计算每个节点的总体概率,希望该概率比原始节点更精确


    希望这就是您所需要的。

    我不确定我是否理解您所需要的。您是否想要一个能够在不访问dom树的情况下成功预测节点位置的启发式方法?还是要优化树搜索的速度?还是别的什么?我在找第一个案子。准确地说,该算法需要在几页上进行训练,然后,它可以自主地在其他页上获得所需的节点,并取得一定程度的成功。我真的不知道如何做到这一点:BGP通过对等方通过ping计算的对等方之间的连接速度信息来预测路径长度(保持活动消息)。但这意味着无论如何都会发生某种全局树遍历。在您的案例中,唯一的方法是测试用例能够以某种方式预测您的实际页面,但这不是很简单,就是相当困难。Wikipedia页面仅用于说明目的,其中的内容与问题无关。回来对于这个问题,由于所有页面都来自Wikipedia,因此可以假设它们的结构有些相似,尽管在一些页面的路径中间会弹出一些额外的框。但是这些额外的节点通常数量很少。因此,算法应该找到节点,并具有一定的可信度,即ode是必需的目标。这看起来不错,但它只占解决方案的一半。这将给出一组节点的概率评分。我认为仅仅根据概率进行排序不会很有成效,因为它会导致许多节点访问。有没有算法遍历这棵树?我正在考虑任何方法,如蚁群算法或人工蜂群算法,它展示了一种遍历图形的有效方法。遍历算法强烈依赖于您以后对数据的使用,例如,在计算概率时,可以方便地准备每个节点的关联表。或者您可以准备其他不同的数据结构来加速图遍历。您提到的算法很好,但它们涵盖了以前未知图的发现和遍历,而在您的情况下,新页面上已经有一些部分信息,因此这些算法的优化有些稀释。