使用图工具将分层二部图转换为圆形图

问题描述

我一直在使用图形工具创建分层主题模型,并使用分层随机块模型 (hSBM) 获得了出色的结果。此处描述了该方法https://github.com/martingerlach/hSBM_Topicmodel

该库创建了一个二部图,其中包含两种节点:单词和文档。

虽然该方法产生了明确的主题,但我想将 hSBM 生成的二部可视化更改为仅使用单词组的圆形图布局。

我的问题是是否可以在单个圆形图中可视化二部结构?

Bipartite layout

Circular layout of hierarchical model

所有的边都存在于文档和单词之间,以及对应的主题/组之间。但是,圆形图应该只包含单词和单词组(或块),而不是文档组,这就是问题所在。我尝试了两种方法

  1. 创建一个虚拟锚顶点,所有单词都连接到它,而不是文档。类似的东西:

    #create anchor and add edges to words
    
    anchor = model.g.add_vertex()
    
    for v in model.g.iter_vertices():
        if model.g.vp['kind'][v] == 1:
            model.g.add_edge(v,anchor)
    
    # delete document vertices
    
    del_list = [v for v in model.g.vertices() if model.g.vp['kind'][v] == 0]
    
    for v in reversed(sorted(del_list)):
        model.g.remove_vertex(v)
    
  2. 在所有单词邻居之间创建边,然后将 word-doc 边过滤为 described here。类似的东西:

    from itertools import combinations
    
    for v,bipartite_label in enumerate(model.g.vp['kind']):
        if bipartite_label == 1:
            neighbours = list(model.g.vertex(v).all_neighbours())
    
            for s,t in combinations(neighbours,2):
                model.g.add_edge(s,t)
    
    g_projected = gt.Graph(gt.GraphView(model.g,vfilt=model.g.vp.kind.a == 0),prune=True)
    

到目前为止我还没有成功,我无法可视化图表。要么我上面的尝试不正确,要么可能是在不重新训练新图上的块模型的情况下改变图是不可能的。

任何帮助或指导将不胜感激,因为我是使用这个库的新手。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)