gpt4 book ai didi

python - 将networkx图输入zss算法(树编辑距离)

转载 作者:行者123 更新时间:2023-12-01 08:25:59 25 4
gpt4 key购买 nike

我想计算两棵树之间的张莎莎树编辑距离(zss库)。但是,我的树采用的是 networkx 图的形式(它们实际上代表 DOM html 树)。 zss documentation 中的示例展示如何手动创建一棵树:

from zss import *
A = (
Node("f")
.addkid(Node("a")
.addkid(Node("h"))
.addkid(Node("c")
.addkid(Node("l"))))
.addkid(Node("e"))
)
zss.simple_distance(A, A) # [0.0]

这将是同一棵树:

import networkx as nx
G=nx.DiGraph()
G.add_edges_from([('f', 'a'), ('a', 'h'), ('a', 'c'), ('c', 'l'), ('f', 'e')])

所以我想将networkx类的树对象转换为zss Node对象,然后计算两棵树之间的编辑距离。

谢谢

(如果您认为这是 XY 问题,请随时告诉我)

最佳答案

使用dfs_tree绝对有帮助:

import zss
import networkx as nx

G=nx.DiGraph()
G.add_edges_from([('f', 'a'), ('a', 'h'), ('a', 'c'), ('c', 'l'), ('f', 'e')])
T = nx.dfs_tree(G, source='f')
nodes_dict = {}
for edge in T.edges():
if edge[0] not in nodes_dict:
nodes_dict[edge[0]] = zss.Node(edge[0])
if edge[1] not in nodes_dict:
nodes_dict[edge[1]] = zss.Node(edge[1])
nodes_dict[edge[0]].addkid(nodes_dict[edge[1]])

print(zss.simple_distance(nodes_dict['f'], nodes_dict['f'])) # 0.0

如果我们不知道哪个节点是 G 的根节点,但知道我们有一个有效的树,我们可以通过调用获取源节点:

source = [n for (n, d) in G.in_degree() if d == 0][0]
T = nx.dfs_tree(G, source=source)

由于根是唯一没有传入节点的节点,因此应该可以工作。

关于python - 将networkx图输入zss算法(树编辑距离),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54253477/

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