De complete oplossing
Leerdoel: je ziet de hele pagerank-functie werken en probeert hem
uit op een web dat je zelf maakt.
De functie
def pagerank(web, d=0.85, epsilon=1e-9):
n = len(web)
rank = {}
for p in web:
rank[p] = 1 / n
while True:
nieuw = {}
for p in web:
som = 0.0
for i in web:
if p in web[i]:
som += rank[i] / len(web[i])
nieuw[p] = (1 - d) / n + d * som
verschil = 0.0
for p in web:
verschil = max(verschil, abs(nieuw[p] - rank[p]))
rank = nieuw
if verschil < epsilon:
return rank
- Regel 2-5:
De startverdeling: elke pagina begint met een gelijk deel, samen precies 1.
- Regel 6-7:
Herhaal tot de waarden stilstaan. Elke ronde bouwt een nieuwe dict op uit de waarden van de vorige ronde.
- Regel 10-12:
Wie linkt er naar
p? Elke paginaidie dat doet, verdeelt haar rank gelijk over haar uitgaande links. - Regel 13:
De formule: een klein vast deel voor de willekeurige sprong (
1 - d), plusdkeer wat er via links binnenkomt. - Regel 14-16:
De grootste verandering van deze ronde. Daaraan zie je of je klaar bent.
- Regel 18-19:
Verandert er minder dan
epsilon, dan staan de waarden stil en zijn de ranks klaar.
Probeer het zelf
Voeg pagina's of links toe aan WEB, of verander DEMPING, en draai
opnieuw. De ranks komen gesorteerd van hoog naar laag.
Geef je een nieuwe pagina geen enkele link, dan komt de som onder de 1 uit. Waarom, lees je bij de fouten.
Door naar aanpassen →.