public Concept CompletePartials(Context context)
        {
            if (context.Contents.Count == 0)
            {
                return(null);
            }

            IParsedPhrase phrase = StarUtilities.ProducedPhrase(context, tagger, parser);

            if (phrase == null)
            {
                // cannot do!
                context.Map["$knowPartials"] = new List <Datum>();
                return(null);
            }
            Concept concept = memory.NewConcept(phrase);

            List <Datum> completes = context.LookupAndAdd <List <Datum> >("$knowCompletes", new List <Datum>());

            List <Datum> data = context.LookupDefaulted <List <Datum> >("$knowPartials", new List <Datum>());

            foreach (Datum datum in data)
            {
                completes.Add(memory.Know(concept, datum));
            }

            context.Map["$knowPartials"] = new List <Datum>();

            return(concept);
        }
        public override bool Match(object check, Context context, IContinuation succ, IFailure fail)
        {
            Concept concept = (Concept)context.Lookup("$knowConcept");

            if (context.Contents.Count == 1)
            {
                if (context.Contents[0] is Variable)
                {
                    Variable left = (Variable)context.Contents[0];
                    if (left.Match(context, concept))
                    {
                        succ.Continue(new Context(context, new List <IContent>()), fail);
                    }
                    else
                    {
                        fail.Fail("Left doesn't match context", succ);
                    }
                    return(true);
                }
                else if (context.Contents[0].Name == "*" || context.Contents[0].Name == "_")
                {
                    List <IContent> words = new List <IContent>();
                    words.Add(new Word(concept.Name));
                    context.Map.Add(StarUtilities.NextStarName(context, context.Contents[0].Name), words);

                    succ.Continue(new Context(context, new List <IContent>()), fail);
                    return(true);
                }
            }

            fail.Fail("Know given multiple values", succ);
            return(true);
        }
        public override bool Produce(Context context, IContinuation succ, IFailure fail)
        {
            string word = StarUtilities.ProducedCode(context, tagger, parser);
            Datum  datum;

            if (word == "past")
            {
                datum = new Datum(null, Relations.Relation.Tense, memory.past, context.Weight);
            }
            else if (word.Contains(" "))
            {
                datum = new Datum(null, Relations.Relation.Tense, memory.NewConcept(word, Concept.Kind.Entity), context.Weight);
            }
            else
            {
                bool isPast = verbs.GetInflection(word) == Verbs.Convert.ext_Ved;
                if (isPast)
                {
                    datum = new Datum(null, Relations.Relation.Tense, memory.past, context.Weight);
                }
                else
                {
                    datum = new Datum(null, Relations.Relation.Tense, memory.now, context.Weight);
                }
            }

            context.LookupAndAdd <List <Datum> >("$knowPartials", new List <Datum>()).Add(datum);

            succ.Continue(new Context(context, new List <IContent>()), fail);
            return(true);
        }
Ejemplo n.º 4
0
        public static bool PrintContents(Context context, IContinuation succ, IFailure fail, params object[] args)
        {
            PluginEnvironment plugenv = (PluginEnvironment)args[0];
            POSTagger         tagger  = new POSTagger(plugenv);
            GrammarParser     parser  = new GrammarParser(plugenv);

            Console.WriteLine(StarUtilities.ProducedCode(context, tagger, parser));
            succ.Continue(new Context(context, new List <IContent>()), fail);
            return(true);
        }
        public bool ConstructSentence(Context context, IContinuation succ, IFailure fail, params object[] args)
        {
            // Need to produce all my contents!
            IParsedPhrase phrase = StarUtilities.ProducedPhrase(context, tagger, parser);

            if (phrase == null)
            {
                // oops, we failed to produce
                fail.Fail("Context could not be produced", succ);
                return(true);
            }

            if (!(phrase.Part == "=P"))
            {
                if (phrase.Part == "FRAG" || phrase.Part == "S" || phrase.Part == "SBARQ")
                {
                    if (final != null)
                    {
                        GroupPhrase   groupPhrase = new GroupPhrase(phrase);
                        IParsedPhrase last        = groupPhrase.GetBranch(groupPhrase.Count - 1);
                        if (!(last.Part == "." || last.Part == "!" || last.Part == "?"))
                        {
                            List <IParsedPhrase> branches = new List <IParsedPhrase>();
                            branches.AddRange(phrase.Branches);
                            branches.Add((IParsedPhrase)final.Clone());
                            phrase = new GroupPhrase(phrase.Part, branches);
                        }
                    }
                }
                else
                {
                    List <IParsedPhrase> branches = new List <IParsedPhrase>();
                    branches.Add(phrase);
                    if (final != null)
                    {
                        branches.Add((IParsedPhrase)final.Clone());
                    }
                    phrase = new GroupPhrase("FRAG", branches);
                }
            }

            List <IContent> contents = new List <IContent>();

            contents.Add(new Word(phrase.Text));
            Context child = new Context(context, contents);

            succ.Continue(child, fail);

            return(true);
        }
        public override bool Produce(Context context, IContinuation succ, IFailure fail)
        {
            IParsedPhrase phrase = StarUtilities.ProducedPhrase(context, tagger, parser);

            if (phrase == null)
            {
                succ.Continue(new Context(context, new List <IContent>()), fail);
                return(true); // cannot do!
            }

            KnowPhrase(phrase, context, memory);

            succ.Continue(new Context(context, new List <IContent>()), fail);
            return(true);
        }
        public override bool Produce(Context context, IContinuation succ, IFailure fail)
        {
            IParsedPhrase phrase = StarUtilities.ProducedPhrase(context, tagger, parser);

            if (phrase == null)
            {
                succ.Continue(new Context(context, new List <IContent>()), fail);
                return(true); // cannot do!
            }

            if (phrase.Part == "PP")
            {
                // the ring on my finger
                // the ring of gold
            }

            succ.Continue(new Context(context, new List <IContent>()), fail);
            return(true);
        }
        public override bool Produce(Context context, IContinuation succ, IFailure fail)
        {
            IParsedPhrase other = StarUtilities.ProducedPhrase(context, tagger, parser);

            if (other == null)
            {
                succ.Continue(new Context(context, new List <IContent>()), fail);
                return(true); // cannot do!
            }

            Concept concept = produceTranslator.GetConcept(other);

            Datum datum = new Datum(null, kind, concept, context.Weight);

            context.LookupAndAdd <List <Datum> >("$knowPartials", new List <Datum>()).Add(datum);

            succ.Continue(new Context(context, new List <IContent>()), fail);
            return(true);
        }
Ejemplo n.º 9
0
        public override bool Call(object value, IContinuation succ, IFailure fail)
        {
            Context context = (Context)value;

            if (principleSource == null || assertionSource == null)
            {
                fail.Fail("ConceptNet sources missing", succ);
                return(true);
            }

            Notion concept;

            if (!principleSource.TryGetValue(StarUtilities.ContentsCode(context, tagger, parser), out concept))
            {
                fail.Fail("Could not find produced in ConceptNet", succ);
                return(true);
            }

            List <Assertion> assertions;

            if (!assertionSource.TryGetValue(new KeyValuePair <Notion, string>(concept, relation), out assertions))
            {
                assertions = new List <Assertion>();
            }

            List <IContent> contents = new List <IContent>();

            foreach (Assertion assertion in assertions)
            {
                contents.Add(new Word(assertion.Sentence));
                contents.Add(new Word(" ."));
            }

            succ.Continue(new Context(context, contents), fail);
            return(true);
        }