public rankHITS(ISpiderEvaluatorBase __parent, double __convergence = 0.0001, int __checkSteps = 10) : base("rankTargetsHITS", "Adaptation of HITS algorithm for inner crawl frontier ranking. Convergence (c): " + __convergence + ", iteration steps: " + __checkSteps + ". Targets are ranked by associated Authority + Hub score multiplied by integer factor: {0}." , 1000, 0, __parent) { description = string.Format(description, scoreUnit); convergence = __convergence; checkSteps = __checkSteps; hits = new HITSRank(); }
/// <summary> /// Prepares the specified context. /// </summary> /// <param name="context">The context.</param> /// <param name="log">The log.</param> public override void Prepare(DocumentSelectResult context, ILogBuilder log) { var byDomain = context.GetByDomain(log); foreach (var pair in byDomain) { WebSiteGraph webSiteGraph = context.domainNameToGraph[pair.Key]; var matrix = webSiteGraph.GetIDMatrix(scoreUnit); p_matrix.Add(pair.Key, matrix); switch (algorithm) { case GraphFactorAlgorithm.HITS: HITSRank hits = new HITSRank(); hits.recalculate(matrix, convergence, steps); p_hits.Add(pair.Key, hits); break; case GraphFactorAlgorithm.PageRank: var pageRank = new PageRank(matrix.GetMatrix(), alpha, convergence, steps); double[] dbl = pageRank.ComputePageRank(); List <Int32> pri = new List <Int32>(); foreach (Double db in dbl) { pri.Add(Convert.ToInt32(db * scoreUnit)); } var ranks = new Dictionary <String, Int32>(); ranks = matrix.MapToX(pri); p_rank.Add(pair.Key, ranks); break; } } }
public override double Score(DocumentSelectResultEntry entry, DocumentSelectResult context, ILogBuilder log) { // WebSiteGraph webSiteGraph = context.domainNameToGraph[entry.DomainID]; Double score = 0; //var matrix = webSiteGraph.GetIDMatrix(); switch (algorithm) { case GraphFactorAlgorithm.HITS: if (p_hits.ContainsKey(entry.DomainID)) { HITSRank hits = p_hits[entry.DomainID]; if (hits.ContainsKey(entry.AssignedID)) { score = hits[entry.AssignedID] * scoreUnit; } } break; case GraphFactorAlgorithm.PageRank: if (p_rank[entry.DomainID].ContainsKey(entry.AssignedID)) { score = p_rank[entry.DomainID][entry.AssignedID]; } break; } return(score); }
public override void onStartIteration() { hits = new HITSRank(); hits.recalculate(wRecord.context.targets, convergence, checkSteps); }