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 {
62 /*
7- First Author: <First Author Name >
8- First Commit Date: <First Commit Date >
3+ First Author: <unk >
4+ First Commit Date: <unk >
95
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
128
139
1410 Repository:
@@ -45,7 +41,7 @@ CREATE QUERY tg_pagerank (STRING v_type, STRING e_type,
4541 file_path:
4642 file to write CSV output to
4743 top_k:
48- # top scores to output
44+ // top scores to output
4945 display_edges:
5046 output edges for visualization
5147 max_change:
@@ -54,65 +50,71 @@ CREATE QUERY tg_pagerank (STRING v_type, STRING e_type,
5450 importance of traversal vs. random teleport
5551 */
5652
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
7073 @@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;
9974
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;
106118 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;
116119 END;
117- END;
118120}
0 commit comments