我是Gremlin的新手,我正试图实现带有JUNG边缘权重的pagerank算法。这些是我已经采取的步骤。我已经安装了2.0.0.0版本的Gremlin。我使用R中的iGraph包创建了一个.graphml文件,我正在将其加载到gremlin中。
import edu.uci.ics.jung.algorithms.scoring.PageRank
g1 = new TinkerGraph()
g1.loadGraphML('file path.graphml')
我的g1图有以下边属性:
g1.E.map
==>{weight=1, freq=1}
==>{weight=1, freq=1}
==>{weight=2, freq=2}
==>{weight=1, freq=1}
==>{weight=1, freq=1}
==>{weight=1, freq=1}
==>{weight=1, freq=1}
==>{weight=1, freq=1}
==>{weight=2, freq=2}
gremlin> g1.V.map
==>{name=a}
==>{name=b}
==>{name=c}
==>{name=d}
==>{name=e}
==>{name=f}
==>{name=g}
==>{name=h}
==>{name=i}
==>{name=k}
j = new GraphJung(g1)
t = new EdgeWeightTransformer("weight",true, false)
pr = new PageRank<Vertex,Edge>(j, t, 0.15d)
pr.evaluate()
j.getVertices().collect{[it, pr.getVertexScore(it)]}
然而,我的结果是
==>[v[n1], 0.046875]
==>[v[n0], 0.046875]
==>[v[n5], 0.046875]
==>[v[n4], 0.046875]
==>[v[n3], 0.046875]
==>[v[n2], 0.046875]
==>[v[n9], 0.046875]
==>[v[n8], 0.046875]
==>[v[n7], 0.046875]
==>[v[n6], 0.046875]
是不正确的。请有人帮助我了解什么是错误的代码。我也试着检查了变压器对j边权的影响,方法如下:.t j.getEdges()。
当我这样做时,我得到null。
但是我知道这些边有权值当我运行
时j.getEdges().collect{[it, it.weight]}
我得到以下结果:
==>[e[3][n1-_default->n5], 1]
==>[e[2][n0-_default->n4], 1]
==>[e[1][n0-_default->n3], 2]
==>[e[0][n0-_default->n2], 1]
==>[e[7][n1-_default->n8], 1]
==>[e[6][n1-_default->n7], 1]
==>[e[5][n1-_default->n6], 1]
==>[e[4][n1-_default->n1], 1]
==>[e[8][n1-_default->n9], 2]
最后,我无法为顶点创建自动密钥。I tried
g1.createAutoIndex('test', Vertex.class, ['name'] as Set)
并得到以下错误:
No signature of method: groovy.lang.MissingMethodException.createAutoIndex() is applicable for argument types: () values: []
谢谢
我也花了很长时间去寻找如何使用Jung实现weight-edge-graph的pagerank。下面是伪代码,您应该使用GrepCode查看Pagerank的详细实现。
For(Edge e: edges){ // Edge is a user-defined class
graph.add(edgeCount,e.getStart,e.getEnd);
map.put(edgeCount,e.getWeight); // map is HashMap
edgeCount++;
}
Transformer edge_weights = MapTransformer.getInstance(map) //Key Step!
Pagerank<Vertex,Edge> ranker = new Pagerank<Vertex,Edge>(graph, edge_weights, alpha);
我建议你看看这个例子:https://github.com/lintool/Cloud9/blob/master/src/dist/edu/umd/cloud9/example/pagerank/SequentialPageRank.java
您可以使用我的伪代码根据此示例进行修改。