2017-04-27 62 views
0

我想实现一个在我的项目中排列多个句子的热门功能。 我想知道如何实现一个有向图,每个节点代表一个句子和一个边缘存在于它们之间,如果句子之间的余弦相似度超过一个阈值。以节点usnig作为句子的有向图Python

回答

1

下面是一段代码,它将绘制一个包含n个节点的图形,其中n是列表中提供的字符串的数量。边缘以格式(i,j)提供,其中i,j是与字符串列表中的索引相对应的节点编号。在这个例子中,(0,2)对应于'Some'和'Strings'之间的边。

由于您正在根据某个阈值连接节点,因此您的边界列表将对应于以下类似的内容:[[(x,y) for y in range(len(words)) if similarity(words[x],words[y]) < threshold][0] for x in range(len(words))]其中similarity()是您检查相似度所定义的函数。

from igraph import * 

words = ['Some', 'Random', 'Strings','Okay'] #Whatever your strings would be 

n_nodes = len(words) #Would be equal to the amount of words you have 

g = Graph(directed=True) 
layout = g.layout('kk') 
edges = [(n,n+1) for n in range(n_nodes-1)] #Connects each node to the next, replace this with your own adjacency tuples 

g.add_vertices(n_nodes) #Add the nodes 
g.add_edges(edges) #Add the edges 

plot(g, bbox=(500,500),margin=30, vertex_label = words) 

祝你好运!

相关问题