我在文本文件中有一个数据,我想在从文件中读取它时创建一个无向加权图。数据由推文组成。对于推文中的每个单词,我都会在图中创建一个节点。对于每个其他单词,我在它们之间创建一条边,并将它们的权重加 1。所以边的权重应该是两个词在所有推文中出现的次数。
我创建了一个图表:
graph=igraph.Graph();
我使用它们的 ID 在两个节点之间获得优势:
edge=graph.es.select(_source=id1,_target=id2);
但是,即使图形是无向的,这也不会找到从 id2 到 id1 的边。所以我使用了以下技巧:
edge1=graph.es.select(_source=id1,_target=id2);
edge2=graph.es.select(_source=id2,_target=id1);
if (len(edge1)>len(edge2)):
edge=edge1;
else:
edge=edge2;
我的第一个问题:有没有更好的方法来做到这一点?
但是我的主要问题是更新权重。在我使用上面的代码找到边缘后,我尝试使用以下方法更新它的权重:
if (len(edge)==0):
graph.add_edge(id1,id2);
edge=graph.es.select(_source=id1,_target=id2);
edge["weight"]=1;
#else add weight
else:
print edge.attributes();
print edge["weight"];
edge["weight"][0]=edge["weight"][0]+1;
但是我收到以下错误:
...
['weight']
[None]
Traceback (most recent call last):
File "/home/ivan/workspace/Twitter/process/MovieGraph.py", line 145, in <module>
processTweet(g,words);
File "/home/ivan/workspace/Twitter/process/MovieGraph.py", line 87, in processTweet
edge["weight"][0]=edge["weight"][0]+1;
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
我尝试调试,但看起来边缘存在但未定义权重。这怎么可能?谢谢你。