TrustRank in Java(using WebGraph)

TrustRank is a biased PageRank method, which starts from some good seeds to propagate trust. It is very easy to implement based on PageRank.

I implement it in Java using the WebGraph and LAW jar package, following is the code:

/*
 * TrustRank implement
 */
package cn.edu.dlut.wisdom;
import it.unimi.dsi.law.rank.PageRank;
import it.unimi.dsi.law.rank.PageRankPowerMethod;
import it.unimi.dsi.law.rank.PageRank.IterationNumberStoppingCriterion;
import it.unimi.dsi.law.rank.PageRank.NormDeltaStoppingCriterion;
import it.unimi.dsi.webgraph.*;
import it.unimi.dsi.fastutil.doubles.*;
import it.unimi.dsi.fastutil.ints.IntSet;
/**
 *
 * @author You Wang
 */
public class TrustRank {
    /**
     * Graph on which TR will run
     */
    private ImmutableGraph g;
    /**
     * PageRank implementation
     */
    private PageRankPowerMethod pr;
    /**
     * to be used as stopping criterion
     */
    private double threshold = PageRank.DEFAULT_THRESHOLD;
    /**
     * number of iteration
     */
    private int numberOfIteration = PageRank.DEFAULT_MAX_ITER;
    private double alpha = PageRank.DEFAULT_ALPHA;
    /**
     * 
     * @param g Graph on which TR will run
     */
    public TrustRank(ImmutableGraph g) {
        this.g = g;
        pr = new PageRankPowerMethod(g);
    }
    public void setThreshold(double t) {
        threshold = t;
    }
    public void setAlpha(double alpha) {
        this.alpha = alpha;
    }
    public void setIteration(int n) {
        numberOfIteration = n;
    }
    public double[] getRank() {
        return pr.rank;
    }
    /**
     * set the biased good seeds
     * @param seeds
     */
    public void setGoodSeeds(IntSet seeds) {
        int numNodes = g.numNodes();
        double[] arr = new double[numNodes];
        int seedSize = seeds.size();
        for (int i = 0; i < numNodes; i++)
            if (seeds.contains(i))
                arr[i] = 1/seedSize;
        pr.start = DoubleArrayList.wrap(arr);
    }
    /**
     * compute the TR scores
     * @throws Exception
     */
    public void compute() throws Exception {
        pr.alpha = alpha;
        pr.stepUntil(PageRank.or(new NormDeltaStoppingCriterion(threshold),
                new IterationNumberStoppingCriterion(numberOfIteration)));
    }
}
If you hava any question, please just put a review, or contact me by e-mail.

posted on 2010-04-09 08:46  小橋流水  阅读(580)  评论(0编辑  收藏  举报

导航