您的位置:首页 > 编程语言 > Java开发

TrustRank in Java(using WebGraph)

2010-04-09 08:46 441 查看
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
[/code]
*/
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.
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: