Преобразование иерархического двудольного графа в круговой граф с помощью графического инструмента

Я использую граф-инструмент для создания иерархических тематических моделей с отличными результатами, используя иерархическую стохастическую блочную модель (hSBM). Подход описан здесь: https://github.com/martingerlach/hSBM_Topicmodel

Библиотека создает двудольный граф с двумя типами узлов: слова и документы.

Хотя этот подход дает четкие темы, я хотел бы изменить двухчастную визуализацию, которую hSBM создает по умолчанию, на макет кругового графика, использующий только группы слов.

Мой вопрос: можно ли визуализировать двудольную структуру в одном круговом графе?

Двусторонний макет

Круговое расположение иерархической модели

Все ребра существуют между документами и словами и соответствующими темами/группами. Однако круговая диаграмма должна содержать только слова и группы слов (или блоки), а не группы документов, в чем и заключается проблема. Я пробовал два подхода:

  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 как графики">описаны здесь. Что-то типа:

    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)
    

Пока мне это не удалось, и я не могу визуализировать график. Либо мои попытки выше неверны, либо может быть невозможно изменить граф без переобучения блочной модели на новом графе.

Буду очень признателен за любую помощь или руководство, поскольку я новичок в использовании этой библиотеки.


person Jakob Rasmussen    schedule 19.05.2021    source источник