import networkx as nx #@UnresolvedImport
from networkx.algorithms import bipartite #@UnresolvedImport
from operator import itemgetter
from random import choice
corpus = open('/home/abehl/Desktop/Corpus/songs.wx', 'r')
ALPHA = 1.5
EPSILON = 0.5
song_nodes = []
word_nodes = []
edges = zip(song_nodes, word_nodes)
B = nx.Graph(edges)
degX,degY = bipartite.degrees(B, word_nodes)
sortedSongNodesByDegree = sorted(degX.iteritems(), key=itemgetter(1))
print sortedSongNodesByDegree
song_nodes2 = []
word_nodes2 = []
Vc = list(set(word_nodes))
edges2 = zip(song_nodes2, word_nodes2)
C= nx.Graph(edges2)
for songDegreeTuple in sortedSongNodesByDegree:
for i in range(songDegreeTuple[1]):
connectedNodes = C.neighbors(songDegreeTuple[0])
VcDash = [element for element in Vc if element not in connectedNodes]
calculateBestNode(VcDash)
def calculateBestNode(VcDashsR):
nodeToProbailityDict = {}
for node in VcDashsR:
degreeOfNode = bipartite(C, [node])[1][node]
probabiltyForNode = (degreeOfNode ** ALPHA) + EPSILON
nodeToProbailityDict[node] = probabiltyForNode
Run Code Online (Sandbox Code Playgroud)
在上面的python程序中,即使在程序中定义了函数'calculateBestNode',python解释器也会抛出以下错误.我在这里错过了一些东西.
NameError:未定义名称"calculateBestNode"
请原谅我在这里发布大型项目.
Python程序从上到下执行,因此您需要在使用它之前定义该函数.一个常见的替代方法是将所有自动执行的代码放在main函数中,并添加到文件的底部:
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
这具有额外的优势,您现在已经编写了一个可以由其他人导入的模块.