Exemple #1
0
        private HashSet <NodeReference> getBackwardTargets(SemanticPart part, IEnumerable <NodeReference> endingNodes = null)
        {
            if (endingNodes == null)
            {
                endingNodes = new List <NodeReference>(new[] { part.StartNode });
            }

            var result = new HashSet <NodeReference>();

            foreach (var path in part.Paths)
            {
                var currentLayer = endingNodes;
                for (var i = path.Length - 1; i >= 0; --i)
                {
                    var edge      = path.GetEdge(i).Inverse();
                    var nextLayer = new List <NodeReference>();
                    foreach (var node in currentLayer)
                    {
                        var targets = Graph.Targets(node, edge);
                        nextLayer.AddRange(targets);
                    }

                    currentLayer = nextLayer;
                }

                result.UnionWith(currentLayer);
            }

            return(result);
        }
Exemple #2
0
        private IEnumerable <SemanticPart> lastRelevantUtterances(string question, NodeReference answer)
        {
            var result = new List <SemanticPart>();

            foreach (var word in UtteranceParser.Parse(question).Words)
            {
                var fromNode = Graph.GetNode(word);
                var paths    = Graph.GetPaths(fromNode, answer, MaximumGraphDepth, MaximumGraphWidth).Take(1).ToArray();
                if (paths.Length == 0)
                {
                    //there is no evidence
                    continue;
                }

                var part = new SemanticPart(question, paths);
                result.Add(part);
            }

            return(result);
        }