Esempio n. 1
0
        private IEnumerable <NodeReference> evaluate(StructuredInterpretation interpretation, QuestionEvidence question)
        {
            HashSet <NodeReference> inputSet = null;

            for (var i = 0; i < _generalFeatureNodes.Length; ++i)
            {
                var generalNode = _generalFeatureNodes[i];
                var featureNode = question.GetFeatureNode(generalNode, Graph);
                var constraint  = interpretation.GetGeneralConstraint(i);
                if (inputSet == null)
                {
                    inputSet = constraint.FindSet(featureNode, Graph);
                }
                else
                {
                    inputSet.IntersectWith(constraint.FindSet(featureNode, Graph));
                }
            }

            var pool = new ContextPool(Graph);

            pool.Insert(inputSet.ToArray());
            foreach (var distinguishConstraint in interpretation.DisambiguationConstraints)
            {
                distinguishConstraint.Execute(pool);
            }
            return(pool.ActiveNodes);
        }
Esempio n. 2
0
        private double generalizationScore(StructuredInterpretation interpretation)
        {
            HashSet <NodeReference> topicNodes = null;

            for (var i = 0; i < _generalFeatureNodes.Length; ++i)
            {
                var generalNode = _generalFeatureNodes[i];
                var constraint  = interpretation.GetGeneralConstraint(i);

                var nodeDomain        = getInstanceDomain(generalNode);
                var topicalizedDomain = getConstrainedLayer(nodeDomain, constraint);

                if (topicNodes == null)
                {
                    topicNodes = new HashSet <NodeReference>();
                }
                else
                {
                    topicNodes.IntersectWith(nodeDomain);
                }
            }

            var pool = new ContextPool(Graph);

            pool.Insert(topicNodes.ToArray());
            foreach (var constraint in interpretation.DisambiguationConstraints)
            {
                constraint.Execute(pool);
            }

            var topicNodesCount     = topicNodes.Count + 1;
            var generalizationBonus = 1.0 * pool.ActiveCount / topicNodesCount;
            var generalizationRatio = 1 - 1.0 / topicNodesCount;

            return(generalizationRatio * generalizationBonus);
        }