-
Notifications
You must be signed in to change notification settings - Fork 0
/
gephi.rb
executable file
·105 lines (89 loc) · 2.93 KB
/
gephi.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env jruby
include Java
require "/lib/java/gephi-toolkit.jar"
java_import org.openide.util.Lookup
java_import org.gephi.project.api.ProjectController
java_import org.gephi.data.attributes.api.AttributeController
java_import org.gephi.graph.api.GraphController
java_import org.gephi.io.importer.api.ImportController
java_import org.gephi.io.importer.api.EdgeDefault
java_import org.gephi.layout.plugin.force.yifanHu.YifanHu
java_import org.gephi.layout.plugin.force.yifanHu.YifanHuLayout
java_import org.gephi.layout.plugin.force.StepDisplacement
java_import org.gephi.io.processor.plugin.DefaultProcessor
java_import org.gephi.statistics.plugin.PageRank
java_import java.util.Arrays
java_import java.util.Comparator
java_import java.lang.Float
def getProjectController
return Lookup.getDefault().lookup(ProjectController.java_class)
end
def getAttributeController
return Lookup.getDefault().lookup(AttributeController.java_class)
end
def getImportController
return Lookup.getDefault().lookup(ImportController.java_class)
end
def getGraphController
return Lookup.getDefault().lookup(GraphController.java_class)
end
#New Project
projectController = getProjectController
puts "Create new project"
projectController.newProject
workspace = projectController.currentWorkspace
#Import file
inputFile = java.io.File.new(ARGV[0])
puts "Import file '#{ARGV[0]}'"
importController = getImportController
container = importController.importFile(inputFile)
container.getLoader().setEdgeDefault(EdgeDefault.valueOf("DIRECTED"));
importController.process(container, DefaultProcessor.new, workspace)
#Get models
attributeController = getAttributeController
attributeModel = attributeController.model
graphController = getGraphController
graphModel = graphController.model
# Do layout
layout = YifanHuLayout.new(nil, StepDisplacement.new(1.0));
layout.setGraphModel(graphModel)
layout.resetPropertiesValues()
layout.setOptimalDistance(200.0)
layout.initAlgo()
for i in [0..100] do
break unless layout.canAlgo
puts "."
layout.goAlgo
end
#Execute pagerank
# pagerank = PageRank.new
# pagerank.setDirected(true)
# pagerank.setUseEdgeWeight(true)
# puts "Execute Pagerank p=#{pagerank.getProbability}"
# pagerank.execute(graphModel, attributeModel);
#Get nodes and sort by pagerank
# nodes = graphModel.graph.nodes.toArray
#
# class PRComparator
# include Comparator
#
# def compare(n1, n2)
# p1 = Float.new(n1.nodeData.attributes.value("pagerank"))
# p2 = n2.nodeData.attributes.value("pagerank")
# return -p1.compareTo(p2)
# end
# end
#
# nodes.each {|node| puts "#{node.nodeData.attributes.value("pagerank")}"}
#
# java.util.Arrays.sort(nodes, PRComparator.new)
#
# #Display top 10
# for i in 0..10
# node = nodes[i]
# pr = node.nodeData.attributes.value("pagerank")
# recruiter = node.nodeData.attributes.value("address")
# id = node.nodeData.attributes.value("_id")
# label = node.nodeData.label
# puts "#{id} #{pr} #{recruiter}"
# end