2015-10-05 60 views
0

目前我正在尝试使用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')作为根的图形的解决方案吗?

+0

很确定递归是去这里的路。你可能有更好的运气搜索“树”而不是“图”。我发现[此链接](https://djangosnippets.org/snippets/2773/)似乎将嵌套列表转换为树型输出,这可能有帮助吗? – whrrgarbl

+0

@whrrgarbl谢谢,我弄明白了。递归确实是要走的路。 –

回答

0

最后,我解决了这个不使用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')]]