-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