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   小橋流水  阅读(584)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示