internal TripletCurioDialogSystem(string lexiconRoot) { _lexicalParser = new LexicalParser(lexiconRoot); _tripletParser = new TripletParser(); _tripletManager = new CurioManager(); _nlGenerator = new TripletNLG(TripletManager.Me); }
internal TripletRule(string pattern, TripletFactory factory, TripletParser owner) { _pattern = pattern; _owner = owner; _factory = factory; _constraints = createConstraints(pattern); }
internal PredicateRule(string pattern, PredicateFactory factory, TripletParser owner) { _pattern = pattern; _owner = owner; _factory = factory; _constraints = getPredicateConstraints(pattern); }
internal TripletRuleConstraint(string pattern, TripletParser owner) { _pattern = pattern; _owner = owner; var isWordGroup = pattern.StartsWith("{") && pattern.EndsWith("}"); var isLexicalType = pattern.StartsWith("[") && pattern.EndsWith("]"); var isPredicate = pattern.StartsWith("#"); var isSubject = pattern.StartsWith("+"); var isTriplet = pattern.StartsWith("@"); if (isWordGroup) { Id = pattern.WithoutParentheses(); _matcher = createWordGroupMatcher(Id, _owner); } else if (isLexicalType) { Id = pattern.WithoutParentheses(); _matcher = createLexicalTypeMatcher(Id); } else if (isPredicate) { Id = pattern.Substring(1); _matcher = createPredicateMatcher(); } else if (isSubject) { Id = pattern.Substring(1); _matcher = createSubjectMatcher(); IsMultiMatch = true; } else if (isTriplet) { Id = pattern.Substring(1); _matcher = createTripletMatcher(); } else { Id = ".word-" + pattern; _matcher = createExactWordMatcher(pattern); } }
internal PredicateRuleConstraint(string pattern, TripletParser owner) { Pattern = pattern; var isWordGroup = pattern.StartsWith("{") && pattern.EndsWith("}"); var isLexicalType = pattern.StartsWith("[") && pattern.EndsWith("]"); if (isWordGroup) { CanBeSubstituted = true; _matcher = createWordGroupMatcher(pattern.WithoutParentheses(), owner); } else if (isLexicalType) { CanBeSubstituted = true; _matcher = createLexicalTypeMatcher(pattern.WithoutParentheses()); } else { CanBeSubstituted = false; _matcher = createExactWordMatcher(pattern); } }
/// <summary> /// Creates group matcher that matches every word group from the group. /// </summary> /// <param name="lexicalType">Name of the word group.</param> /// <returns>The created matcher.</returns> protected Predicate<TripletWordGroup> createWordGroupMatcher(string groupName, TripletParser owner) { var wordGroup = owner.GetGroup(groupName); return g => wordGroup.Contains(g.TextSpan); }