/// <summary> /// Fusions the specified operation. /// </summary> /// <param name="scoreSet">The score set.</param> /// <param name="operation">The operation.</param> /// <param name="doRankingFusion">if set to <c>true</c> [do ranking fusion].</param> /// <param name="doDomainNormalization">if set to <c>true</c> [do domain normalization].</param> /// <param name="log">The log.</param> /// <returns></returns> public static DocumentSelectResult Fusion(this IEnumerable <DocumentSelectResult> scoreSet, operation operation, Boolean doRankingFusion, Boolean doDomainNormalization, ILogBuilder log) { List <DocumentSelectResultEntry> fusioned = null; if (doDomainNormalization) { log.log("Performing domain-level normalization over [" + scoreSet.Count() + "] document score sets"); foreach (DocumentSelectResult set in scoreSet) { DocumentRankingExtensions.NormalizeWithinDomain(set.items, log); } } if (doRankingFusion) { log.log("Ranking fusion over [" + scoreSet.Count() + "] document score sets"); fusioned = rankFusion(scoreSet.Select(x => x.items), log); } else { log.log("Score fusion over [" + scoreSet.Count() + "] document score sets"); fusioned = ScoreFusion(scoreSet.Select(x => x.items), operation, log); } DocumentSelectResult output = new DocumentSelectResult(); // scoreSet.First(); output.name = "ScoreFusionBy" + operation.ToString(); output.description = "Sets fusioned: "; foreach (var s in scoreSet) { output.description = s.name + " "; } output.items.AddRange(fusioned); return(output); }