Verwaltet, um ein hypernym-Diagramm zu erstellen, aber weiterhin gebundene Methode Synset.name von Synset ('dog.n') anstelle von dog.n im Diagramm zu erhalten. Wo ist der Fehler?NetworkX und 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()
Edit 1:
Managed einen hypernym Graphen zu schaffen, sondern auf immer gebunden Methode Synset.name von Synset ('dog.n') anstelle von dog.n in dem Diagramm zu halten. Wo ist der Fehler?
Können Sie ein komplettes Beispiel [MCVE] und Sie können uns sagen, was Sie in diesem Code passieren erwarten und was passiert? – Joel
Bitte beachten Sie Edit 1. –
Ich bin nicht ganz sicher, was Sie für die Ausgabe beschreiben. Es sieht jedoch so aus, als ob die Funktion, die das Diagramm erstellt, beim Erstellen der Knoten etwas anderes tut, als Sie erwarten. Ich vermute, das hat etwas damit zu tun, dass du 'dog' als' wn.synsets ('dog') [0] 'definiert hast, während der von dir angegebene Link 'dog = wn.synset (' dog. n.01 ') '. – Joel