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.