示例#1
0
        /// <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);
        }