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); }
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); }
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); }