Explication de l'algorithme HITS ================================ Intuition : Suite a une requete, on obtient un ensemble de pages (urlId) { R1, ..., Rn } qui contiennent les mots de la requete. On veut classer ces pages par rapport a leur importance sur cette requette. (Attention, PageRank donne une importance globale, independante de la requete, qui peut servir ensuite a departager les pages resultat de la requete qui ont le meme score HITS.) Pour cela, on considere deux ensembles suplementaires de pages : - l'ensemble "origine" { O1, ..., Om } qui sont les pages qui ont des liens vers les pages R1,...,Rn - l'ensemble "cible" { C1,...,Ck } qui sont les pages vers lequelles les pages R1,...,Rn ont une reference (lien). En considerant les liens comme les arcs d'un graphe et chaque element des ensembles R, O et C comme des noeuds, on obtient un graphe. (Attention, il se peut qu'une page appartient en meme temps aux ensembles C et O.) On ignore toutefois les references internes des pages. Une page resultat a un score HITS eleve si elle a une grande "autorite", cad, que plusieurs pages du graphe ainsi construit pointe vers elle. En meme temps, il faut que les pages qui pointe vers cette page "autorite" ayent beaucoup de telles references importantes. On les appelle des bon "concentrateurs" (hub). Les definitions des autorites et des concentrateurs sont donc mutuellement recursives. Donc l'algorithme de calcul du score HITS est iteratif avec comme limite la stabilisation (meme valeur du score deux iterations de suite). L'algorithme utilise deux vecteurs de reels AUTH et HUB. L'entree de chaque vecteur correspond a une page de l'ensemble R U O U C. AUTH[i] = score "autorite" de la page i de l'ensemble R U O U C HUB[i] = score "concentrateur" ... Initialement: pour chaque i in R U O U C faire AUTH[i] = (nombre d'arcs entrant de i) / nombre de sommets HUB[i] = (nombre d'arcs sortant de i) / nombre de sommets Algorithme tant que vrai faire /* normaliser les valeurs de HUB et AUTH, cad : */ SAUTH = Somme AUTH[i] SHUB = Somme HUB[i] pour tout i faire AUTH[i] = AUTH[i] / SAUTH HUB[i] = HUB[i] / SHUB /* calculer les nouvelles valeurs */ pour tout i faire NewHUB[i] = Somme AUTH[j] avec i -> j NewAUTH[i] = Somme HUB[j] avec j -> i si AUTH == NewAUTH et HUB == NewHUB alors break else AUTH = NewAUTH HUB = NewHUB fin tant que Cette algorithme est tres simple, donc facile a detourner pour obtenir un score HITS eleve meme si on n'est pas une autorite. D'autres variantes considere le domaine de chaque page et son poids PageRank pour ponderer les sommes de l'algorithme.