Ga naar hoofdinhoud

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
  1. Regel 2-5:

    De startverdeling: elke pagina begint met een gelijk deel, samen precies 1.

  2. Regel 6-7:

    Herhaal tot de waarden stilstaan. Elke ronde bouwt een nieuwe dict op uit de waarden van de vorige ronde.

  3. Regel 10-12:

    Wie linkt er naar p? Elke pagina i die dat doet, verdeelt haar rank gelijk over haar uitgaande links.

  4. Regel 13:

    De formule: een klein vast deel voor de willekeurige sprong (1 - d), plus d keer wat er via links binnenkomt.

  5. Regel 14-16:

    De grootste verandering van deze ronde. Daaraan zie je of je klaar bent.

  6. 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.

Python
Code-omgeving wordt voorbereid…

Door naar aanpassen →.