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. 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值