如何在图表中表示列表中的列表等的嵌套列表?

2024-06-06 08:03:27 发布

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

目前我正在尝试使用networkx将wordnet的一部分可视化到一个图形中。nltk.wordnet.synsets('girl')[0].tree(lambda s:s.hypernyms())返回的输出如下所示:

[Synset('girl.n.01'),
 [Synset('woman.n.01'),
  [Synset('adult.n.01'),
   [Synset('person.n.01'),
    [Synset('causal_agent.n.01'),
     [Synset('physical_entity.n.01'), [Synset('entity.n.01')]]],
    [Synset('organism.n.01'),
     [Synset('living_thing.n.01'),
      [Synset('whole.n.02'),
       [Synset('object.n.01'),
        [Synset('physical_entity.n.01'), [Synset('entity.n.01')]]]]]]]],
  [Synset('female.n.02'),
   [Synset('person.n.01'),
    [Synset('causal_agent.n.01'),
     [Synset('physical_entity.n.01'), [Synset('entity.n.01')]]],
    [Synset('organism.n.01'),
     [Synset('living_thing.n.01'),
      [Synset('whole.n.02'),
       [Synset('object.n.01'),
        [Synset('physical_entity.n.01'), [Synset('entity.n.01')]]]]]]]]]]

我的目标是用有向图来表示这个输出。 关键是Synset('entity.n.01')应该是根节点,并且应该有一条从Synset('girl.n.01')Synset('entity.n.01')和从Synset('organism.n.01')Synset('entity.n.01')等的路径

这应该通过递归来解决吗?有人知道从嵌套列表等到以Synset('entity.n.01')为根的图的解决方案吗?你知道吗


Tags: networkxobject可视化wordnetagentpersonentitycausal
1条回答
网友
1楼 · 发布于 2024-06-06 08:03:27

最后,我解决了这个问题,没有在synset上使用nltk树方法,而是使用递归函数遍历单词的同义词

from nltk.corpus import wordnet as wn

def extract_hypernyms(sense):
    global data_list
    if(len(sense.hypernyms()) > 0):
        for hypernym in sense.hypernyms():
            data_list.append(sense)
            extract_hypernyms(hypernym)
    else:
        hypernym_tree.append([data for data in data_list])
        del data_list[:]

if __name__ =='__main__':
    hypernym_tree = list()
    data_list = []
    word = wn.synsets('avocado')[0]
    extract_hypernyms(word)
    create_path_from_nodes(hypernym_tree)

这将返回您循环访问的列表的列表。你知道吗

[[Synset('avocado.n.01'),
  Synset('edible_fruit.n.01'),
  Synset('fruit.n.01'),
  Synset('reproductive_structure.n.01'),
  Synset('plant_organ.n.01'),
  Synset('plant_part.n.01'),
  Synset('natural_object.n.01'),
  Synset('whole.n.02'),
  Synset('object.n.01'),
  Synset('physical_entity.n.01')],
 [Synset('edible_fruit.n.01'),
  Synset('produce.n.01'),
  Synset('food.n.02'),
  Synset('solid.n.01'),
  Synset('matter.n.03'),
  Synset('physical_entity.n.01')]]

相关问题 更多 >