Graph databases Gremlin中可定制的PageRank算法?
我正在寻找一个可定制PageRank算法的小精灵版本。有几个旧版本,其中一个(from:)粘贴在下面。我很难将流适配到当前基于GremlingRoovypepeline的结构中。这个或类似的东西的现代化等价物是什么Graph databases Gremlin中可定制的PageRank算法?,graph-databases,gremlin,pagerank,Graph Databases,Gremlin,Pagerank,我正在寻找一个可定制PageRank算法的小精灵版本。有几个旧版本,其中一个(from:)粘贴在下面。我很难将流适配到当前基于GremlingRoovypepeline的结构中。这个或类似的东西的现代化等价物是什么 $_g := tg:open() g:load('data/graph-example-2.xml') $m := g:map() $_ := g:key('type', 'song')[g:rand-nat()] repeat 2500 $_ := ./outE[@label
$_g := tg:open()
g:load('data/graph-example-2.xml')
$m := g:map()
$_ := g:key('type', 'song')[g:rand-nat()]
repeat 2500
$_ := ./outE[@label='followed_by'][g:rand-nat()]/inV
if count($_) > 0
g:op-value('+',$m,$_[1]/@name, 1.0)
end
if g:rand-real() > 0.85 or count($_) = 0
$_ := g:key('type', 'song')[g:rand-nat()]
end
end
g:sort($m,'value',true())
另一个版本见的幻灯片55。使用if语句并基于它们更改遍历的能力对于定制很有价值
非常感谢我想我会自己回答,以防别人需要。请注意,这不是一个非常有效的PageRank计算。它只应被视为一个学习的例子
g = new TinkerGraph()
g.loadGraphML('graph-example-2.xml')
m = [:]
g.V('type','song').sideEffect{m[it.name] = 0}
// pick a random song node that has 'followed_by' edge
def randnode(g) {
return(g.V('type','song').filter{it.outE('followed_by').hasNext()}.shuffle[0].next())
}
v = randnode(g)
for(i in 0..2500) {
v = v.outE('followed_by').shuffle[0].inV
v = v.hasNext()?v.next():null
if (v != null) {
m[v.name] += 1
}
if ((Math.random() > 0.85) || (v == null)) {
v = randnode(g)
}
}
msum = m.values().sum()
m.each{k,v -> m[k] = v / msum}
println "top 10 songs: (normalized PageRank)"
m.sort {-it.value }[0..10]
以下是简化单行程序的一个很好的参考:
(还有小精灵维基:)