-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathpage_rank.py
More file actions
39 lines (30 loc) · 1.22 KB
/
page_rank.py
File metadata and controls
39 lines (30 loc) · 1.22 KB
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
# Mirko Mantovani
import sys
sys.setrecursionlimit(1500)
class PageRank:
def __init__(self, alpha=0.85):
self.alpha = alpha
def s(self, word_graph, a, p, previous_s):
return self.alpha * sum(previous_s[b]/word_graph.get_out_degree(b) for b in word_graph.get_pointing_to(a)) + \
(1 - self.alpha)/word_graph.get_len()
def page_rank(self, word_graph, max_iterations):
p = {}
page_rank = {}
last_page_rank = {}
for node in word_graph.graph:
p[node] = 1 / len(word_graph.graph)
page_rank[node] = 1 / len(word_graph.graph)
last_page_rank[node] = 1 / len(word_graph.graph)
for iteration in range(0, max_iterations):
for i in word_graph.graph:
# print('page rank word '+str(i))
page_rank[i] = self.s(word_graph, i, p, last_page_rank)
# normalization and updating steps
early_exit = True
for i in page_rank:
if early_exit and last_page_rank[i] != page_rank[i]:
early_exit = False
last_page_rank[i] = page_rank[i]
if early_exit:
return page_rank
return page_rank