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

2024-10-03 02:41:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算两棵树之间的张沙树编辑距离(zss库)。但是,我的树是networkx图的形式(它们实际上表示domhtml树)。zssdocumentation中的示例演示了如何手动创建树:

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]

与以下树相同:

^{pr2}$

所以我想把networkx类的树对象转换成zss节点对象,然后计算两棵树之间的编辑距离。在

谢谢

(如果您认为这是XY问题,请毫不犹豫地告诉我)


Tags: 对象fromimportnetworkxnode编辑距离示例
1条回答
网友
1楼 · 发布于 2024-10-03 02:41:56

使用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的根节点,但知道我们有一个有效的树,我们可以通过调用以下命令来获取源节点:

^{pr2}$

因为根节点是唯一没有传入节点的节点,所以应该可以这样做。在

相关问题 更多 >