private void calculateEstimatedRankContributions(XElement element, string value, XElement rankcontrib, int n) { RankLog ranklog = RankLog.CreateRankLogFromXml(value); RankLogStage finalStage = ranklog.FinalRankStage; XElement result = new XElement("result"); result.Add(new XAttribute("pos", n)); foreach (var feature in finalStage.Features) { result.Add(new XAttribute(feature.Name, feature.EstimatedRankContribution())); } // add external boost. "Rank" returned with results - "rank_after" from the last stage in RankXML XElement rank = element.Element("Rank"); double finalRank = double.Parse(rank.Value); double externalBoost = rank != null ? (Math.Round(finalRank - finalStage.RankAfter, 4)) : 0.0; double threshold = 1.0E-4; if (Math.Abs(externalBoost) < threshold) { externalBoost = 0; } result.Add(new XAttribute("ExternalBoost", externalBoost)); result.Add(new XElement("Rank", Math.Round(finalRank, 3))); rankcontrib.Add(result); }
protected override void AddItemProperty(PSObject item, string key, object value) { if (key.Equals("RankDetail", StringComparison.InvariantCultureIgnoreCase)) { var rlog = RankLog.CreateRankLogFromXml((string)value); RankLogStage stage = rlog.FinalRankStage; foreach (var feature in stage.Features) { item.Properties.Add( new PSVariableProperty( new PSVariable(feature.Name, feature.EstimatedRankContribution()))); } } else { base.AddItemProperty(item, key, value); } }