-1
管理创建一个hypernym图,但继续获得绑定方法Synset('dog.n')的Synset.name而不是dog.n在图中。错误在哪里?NetworkX和Wordnet
from nltk.corpus import wordnet as wn
import networkx as nx
import matplotlib.pyplot as plt
def closure_graph(synset, fn):
seen = set()
graph = nx.DiGraph()
def recurse(s):
if not s in seen:
seen.add(s)
graph.add_node(s.name)
for s1 in fn(s):
graph.add_node(s1.name)
graph.add_edge(s.name, s1.name)
recurse(s1)
recurse(synset)
return graph
dog = wn.synsets('dog')[0]
G = closure_graph(dog,
lambda s: s.hypernyms())
index = nx.betweenness_centrality(G)
plt.rc('figure', figsize=(12, 7))
node_size = [index[n]*1000 for n in G]
pos = nx.spring_layout(G)
nx.draw_networkx(G, pos, node_size=node_size, edge_color='r', alpha=.3, linewidths=0)
plt.show()
编辑1:
成功地创建一个上位词图表,但保持在同义词集合的获得方法结合Synset.name( 'dog.n'),而不是在图形dog.n。错误在哪里?
你能提供一个完整的例子[MCVE],你能告诉我们你所期望的在此代码发生的又是什么情况? – Joel
请参阅编辑1. –
我不太清楚你对输出的描述。但它看起来像创建图的函数在创建节点上做的事情与您期望的不同。我怀疑这与您将'dog'定义为'wn.synsets('dog')[0]''的事实有关,而您提供的链接具有'dog = wn.synset('dog。 N.01' )'。 – Joel