1
- CREATE QUERY tg_pagerank (STRING v_type, STRING e_type,
2
- FLOAT max_change=0.001, INT maximum_iteration=25, FLOAT damping=0.85, INT top_k = 100,
3
- BOOL print_results = TRUE, STRING result_attribute = "", STRING file_path = "",
4
- BOOL display_edges = FALSE) SYNTAX V1 {
5
-
1
+ CREATE QUERY tg_pagerank (STRING v_type, STRING e_type, FLOAT max_change=0.001, INT maximum_iteration=25, FLOAT damping=0.85, INT top_k = 100, BOOL normalize=TRUE, BOOL print_results = TRUE, STRING result_attribute = "", STRING file_path = "", BOOL display_edges = FALSE) SYNTAX V1 {
6
2
/*
7
- First Author: <First Author Name >
8
- First Commit Date: <First Commit Date >
3
+ First Author: <unk >
4
+ First Commit Date: <unk >
9
5
10
- Recent Author: <Recent Commit Author Name>
11
- Recent Commit Date: <Recent Commit Date>
6
+ Recent Author: Rob Rossmiller
7
+ Recent Commit Date: Sept 4, 2024
12
8
13
9
14
10
Repository:
@@ -45,7 +41,7 @@ CREATE QUERY tg_pagerank (STRING v_type, STRING e_type,
45
41
file_path:
46
42
file to write CSV output to
47
43
top_k:
48
- # top scores to output
44
+ // top scores to output
49
45
display_edges:
50
46
output edges for visualization
51
47
max_change:
@@ -54,65 +50,71 @@ CREATE QUERY tg_pagerank (STRING v_type, STRING e_type,
54
50
importance of traversal vs. random teleport
55
51
*/
56
52
57
- TYPEDEF TUPLE<VERTEX Vertex_ID, FLOAT score> Vertex_Score;
58
- HeapAccum<Vertex_Score>(top_k, score DESC) @@top_scores_heap;
59
- SetAccum<VERTEX> @@top_vertices; # vertices with top score
60
- MaxAccum<FLOAT> @@max_diff = 9999; # max score change in an iteration
61
- SumAccum<FLOAT> @sum_recvd_score = 0; # sum of scores each vertex receives FROM neighbors
62
- SumAccum<FLOAT> @sum_score = 1; # initial score for every vertex is 1.
63
- SetAccum<EDGE> @@edge_set; # list of all edges, if display is needed
64
- FILE f (file_path);
65
-
66
- # PageRank iterations
67
- Start = {v_type}; # Start with all vertices of specified type(s)
68
- WHILE @@max_diff > max_change
69
- LIMIT maximum_iteration DO
53
+ TYPEDEF TUPLE<VERTEX Vertex_ID, FLOAT score> Vertex_Score;
54
+ HeapAccum<Vertex_Score>(top_k, score DESC) @@top_scores_heap;
55
+ SetAccum<VERTEX> @@top_vertices; // vertices with top score
56
+ MaxAccum<FLOAT> @@max_diff = 9999; // max score change in an iteration
57
+ SumAccum<FLOAT> @sum_recvd_score = 0; // sum of scores each vertex receives FROM neighbors
58
+ SumAccum<FLOAT> @sum_score = 1; // initial score for every vertex is 1.
59
+ SetAccum<EDGE> @@edge_set; // list of all edges, if display is needed
60
+ FILE f (file_path);
61
+ INT N=1;
62
+
63
+
64
+ // PageRank iterations
65
+ Start = {v_type}; // Start with all vertices of specified type(s)
66
+ IF normalize THEN
67
+ N = Start.size();
68
+ tmp = SELECT s FROM Start:s
69
+ ACCUM s.@sum_score = 1.0/N;
70
+ END;
71
+
72
+ WHILE @@max_diff > max_change LIMIT maximum_iteration DO
70
73
@@max_diff = 0;
71
- V = SELECT s
72
- FROM Start:s -(e_type:e)- v_type:t
73
- ACCUM
74
- t.@sum_recvd_score += s.@sum_score/(s.outdegree(e_type))
75
- POST-ACCUM
76
- s.@sum_score = (1.0-damping) + damping * s.@sum_recvd_score,
77
- s.@sum_recvd_score = 0,
78
- @@max_diff += abs(s.@sum_score - s.@sum_score');
79
- END; # END WHILE loop
80
-
81
- # Output
82
- IF file_path != "" THEN
83
- f.println("Vertex_ID", "PageRank");
84
- END;
85
- V = SELECT s
86
- FROM Start:s
87
- POST-ACCUM
88
- IF result_attribute != "" THEN
89
- s.setAttr(result_attribute, s.@sum_score)
90
- END,
91
-
92
- IF file_path != "" THEN
93
- f.println(s, s.@sum_score)
94
- END,
95
-
96
- IF print_results THEN
97
- @@top_scores_heap += Vertex_Score(s, s.@sum_score)
98
- END;
99
74
100
- IF print_results THEN
101
- PRINT @@top_scores_heap;
102
- IF display_edges THEN
103
-
104
- FOREACH vert IN @@top_scores_heap DO
105
- @@top_vertices += vert.Vertex_ID;
75
+ V = SELECT s FROM Start:s -(e_type:e)- v_type:t
76
+ ACCUM t.@sum_recvd_score += s.@sum_score/(s.outdegree(e_type))
77
+ POST-ACCUM
78
+ s.@sum_score = (1.0-damping)/N + damping * s.@sum_recvd_score,
79
+ s.@sum_recvd_score = 0,
80
+ @@max_diff += abs(s.@sum_score - s.@sum_score');
81
+ END;
82
+
83
+ // Output
84
+ IF file_path != "" THEN
85
+ f.println("Vertex_ID", "PageRank");
86
+ END;
87
+
88
+ V = SELECT s FROM Start:s
89
+ POST-ACCUM
90
+ IF result_attribute != "" THEN
91
+ s.setAttr(result_attribute, s.@sum_score)
92
+ END,
93
+
94
+ IF file_path != "" THEN
95
+ f.println(s, s.@sum_score)
96
+ END,
97
+
98
+ IF print_results THEN
99
+ @@top_scores_heap += Vertex_Score(s, s.@sum_score)
100
+ END;
101
+
102
+ IF print_results THEN
103
+ PRINT @@top_scores_heap;
104
+ IF display_edges THEN
105
+
106
+ FOREACH vert IN @@top_scores_heap DO
107
+ @@top_vertices += vert.Vertex_ID;
108
+ END;
109
+
110
+ Top = {@@top_vertices};
111
+ Top = SELECT s
112
+ FROM Top:s -(e_type:e)- v_type:t
113
+ WHERE @@top_vertices.contains(t)
114
+ ACCUM @@edge_set += e;
115
+
116
+ PRINT @@edge_set;
117
+ PRINT Top;
106
118
END;
107
-
108
- Top = {@@top_vertices};
109
- Top = SELECT s
110
- FROM Top:s -(e_type:e)- v_type:t
111
- WHERE @@top_vertices.contains(t)
112
- ACCUM @@edge_set += e;
113
-
114
- PRINT @@edge_set;
115
- PRINT Top;
116
119
END;
117
- END;
118
120
}
0 commit comments