Beispiel #1
0
        public List <LSyntagm> Match(LSyntagm querySyntagm)
        {
            LSyntagm jokerSyntagm = this.FindJokerStart(querySyntagm);

            string[] startingPrimWords = jokerSyntagm.ToString().Split(' ').Where(w => w != Constants.SAFE_JOKER_TOKEN).ToArray();

            List <LSyntagm> prims = new List <LSyntagm>();

            foreach (string word in startingPrimWords)
            {
                if (this.Primaries.ContainsKey(word))
                {
                    prims.Add(this.Primaries[word]);
                }
            }

            List <LSyntagm> primParents = new List <LSyntagm>();

            foreach (var prim in prims)
            {
                foreach (var parent in prim.Parents)
                {
                    if (!primParents.Contains(parent) && jokerSyntagm.Equals(parent))
                    {
                        primParents.Add(parent);
                    }
                }
            }

            List <LSyntagm> finalResult = new List <LSyntagm>();

            finalResult.AddRange(this.RecursiveQuery(jokerSyntagm, primParents));

            return(finalResult.Distinct().ToList());
        }
Beispiel #2
0
        private LSyntagm FindJokerStart(LSyntagm querySyntagm)
        {
            if (querySyntagm.ToString() == Constants.SAFE_JOKER_TOKEN)
            {
                return(querySyntagm.Parents.First());
            }

            foreach (var child in querySyntagm.Children)
            {
                LSyntagm result = FindJokerStart(child);

                if (result != null)
                {
                    return(result);
                }
            }

            return(null);
        }