예제 #1
0
        public override spiderEvalRuleResult evaluate(spiderLink link)
        {
            spiderEvalRuleResult output = new spiderEvalRuleResult(this);

            output.score = 0;

            double          coeficient = 0;
            linknodeElement node       = wRecord.linkHierarchy.GetByOriginalPath(link.link.originalUrl);

            if (node == null)
            {
                return(output);
            }
            if (node.level == 0)
            {
                return(output);
            }
            if (rootScore > 0)
            {
                coeficient   = ((double)node.score) / ((double)rootScore);
                output.score = Convert.ToInt32(coeficient * scoreUnit);
            }

            return(output);
        }
예제 #2
0
        public override spiderEvalRuleResult evaluate(spiderLink link)
        {
            spiderEvalRuleResult output = new spiderEvalRuleResult(this);

            linknodeElement node = wRecord.linkHierarchy.GetByOriginalPath(link.url);

            if (node == null)
            {
                wRecord.log("Link not found in the hierarchy");
                return(output);
            }
            if (node.level == 0)
            {
                return(output);
            }

            int range = (max - min);

            if (range > 0)
            {
                double coeficient = ((double)node.level) / range;

                output.score = Convert.ToInt32(penaltyUnit * coeficient);
            }
            return(output);
        }
예제 #3
0
        /// <summary>
        /// Takes information from page - called before evaluation
        /// </summary>
        /// <param name="page">The page.</param>
        public override void learn(spiderLink link)
        {
            //
            linknodeElement node = wRecord.linkHierarchy.GetByOriginalPath(link.url);

            if (node == null)
            {
                wRecord.log("Link not found in the hierarchy");
                return;
            }
            min = Math.Min(node.level, min);
            max = Math.Max(node.level, max);
        }
예제 #4
0
        public override spiderEvalRuleResult evaluate(spiderLink link)
        {
            spiderEvalRuleResult result = new spiderEvalRuleResult(this);

            if (tree.Gd == null)
            {
                tree.buildGd();
            }
            int max = tree.bestNode.score;

            linknodeElement linkNode = tree.Gd.sourceNodes[link.url];

            double score = ((double)scoreUnit) * ((double)linkNode.score / ((double)max));

            result.score = Convert.ToInt32(score);

            return(result);
        }
예제 #5
0
        public override spiderEvalRuleResult evaluate(spiderLink link)
        {
            spiderEvalRuleResult result = new spiderEvalRuleResult(this);

            if (tree.Gd == null)
            {
                tree.buildGd();
            }

            if (tree.Gd == null)
            {
                result.layer = layer3ID;
                return(result);
            }

            linknodeElement linkNode = tree.GetLinkNode(link.url); //.Gd.sourceNodes[link.url];

            if (linkNode == null)
            {
                result.layer = layer3ID;
                return(result);
            }
            if (tree.bestNode == linkNode)
            {
                result.layer = layerID;
            }
            else if (tree.bestNode.items.Values.Contains(linkNode))
            {
                result.layer = layerID;
            }
            else if (tree.bestNode.items.Values.Any(x => x.items.Values.Contains(linkNode)))
            {
                result.layer = layer2ID;
            }
            else
            {
                result.layer = layer3ID;
            }

            return(result);
        }
예제 #6
0
        protected void rebuildGd()
        {
            Gd = new linknodeBuilder();

            foreach (var pair in Gt.newpathNodes)
            {
                string path  = pair.Key;
                int    score = pair.Value.score;

                if (Gc.newpathNodes.Count() > 0)
                {
                    if (Gc.newpathNodes.ContainsKey(path))
                    {
                        score = score / Gc.newpathNodes[path].score;
                    }
                }
                if (Gb.newpathNodes.ContainsKey(path))
                {
                    score = score + Gb.newpathNodes[path].score;
                }
                string opath = Gt.newpathNodes[path].originalPath;
                Gd.Add(opath, Gt.newpathNodes[path].meta, score);
            }

            int             sc     = int.MinValue;
            linknodeElement scBest = null;

            foreach (var nd in Gd.sourceNodeList)
            {
                if (nd.score > sc)
                {
                    sc     = nd.score;
                    scBest = nd;
                }
            }

            bestNode = scBest;
        }