def evaluate(self, rulez: ExplicitRules, navigator: Navigator) -> ExplicitEvaluation: logging.debug("evaluate like") if abs(len(self.as_text()) - len(navigator.get_curr())) > 1: return ExplicitEvaluation(False, dict(), [navigator.get_absolute_index() - 1]) result = self.levenshtein(self.as_text(), navigator.get_curr()) <= 1 return ExplicitEvaluation(result, dict(), [navigator.get_absolute_index() - 1])
def evaluate(self, rulez: ExplicitRules, navigator: Navigator) -> ExplicitEvaluation: logging.debug("evaluate label") if navigator.get_curr() not in rulez.labels: return ExplicitEvaluation(False, dict(), [navigator.get_absolute_index() - 1]) result = self.as_text() == rulez.labels[navigator.get_curr()] return ExplicitEvaluation(result, dict(), [navigator.get_absolute_index() - 1])
def evaluate(self, rulez: ExplicitRules, navigator: Navigator) -> ExplicitEvaluation: logging.debug("evaluate slot") expr1 = self.__str__() == navigator.get_curr() expr2 = self.as_text() == "number" and Strings.is_numeric( navigator.get_curr()) expr3 = self.evaluate_pattern(rulez, navigator.get_curr()) expr4 = self.evaluate_mapping(rulez, navigator.get_curr()) evaluation = expr1 or expr2 or expr3 or expr4 return ExplicitEvaluation(evaluation, dict(), [navigator.get_absolute_index() - 1])
def evaluate(self, rulez: ExplicitRules, navigator: Navigator) -> ExplicitEvaluation: logging.debug("evaluate text") result = self.text == navigator.get_curr() return ExplicitEvaluation(result, dict(), [navigator.get_absolute_index() - 1])
def evaluate(self, rulez: ExplicitRules, navigator: Navigator) -> ExplicitEvaluation: logging.debug("evaluate regex") tuples: List[RegexUnit] = [ RegexUnit(navigator.get_absolute_index() - 1, navigator.get_curr()) ] pattern = re.compile(self.pattern) entries: Dict[str, str] = dict() text = "".join(map(lambda x: x.token, tuples)) result = re.search(pattern, text) if result: entries["group"] = result.group() return ExplicitEvaluation(True, entries, [navigator.get_absolute_index() - 1]) while navigator.has_next(): navigator.__next__() tuples.append( RegexUnit(navigator.get_absolute_index() - 1, navigator.get_curr())) text = "".join(map(lambda x: x.token, tuples)) result = re.search(pattern, text) if result: for i in reversed(range(len(tuples))): substr = "".join(map(lambda x: x.token, tuples[i:])) result = re.search(pattern, text) if result: if result.pos == 0 and substr[result.pos - 1] == ' ': entries["group"] = result.group() return ExplicitEvaluation( True, entries, list(map(lambda x: x.index, tuples[i:]))) return ExplicitEvaluation(False, entries, [])
def evaluate(self, rulez: ExplicitRules, navigator: Navigator) -> ExplicitEvaluation: logging.debug("evaluate group") whitelist = False for token in self.tokens: if token is not Not: whitelist = True if token.as_text() == navigator.get_curr(): result = token is not Not return ExplicitEvaluation(result, dict(), [navigator.get_absolute_index() - 1]) if token is Like: if self.levenshtein(token.as_text(), navigator.get_curr()) <= 1: return ExplicitEvaluation( True, dict(), [navigator.get_absolute_index() - 1]) return ExplicitEvaluation(not whitelist, dict(), [navigator.get_absolute_index() - 1])
def evaluate(self, rulez: ExplicitRules, navigator: Navigator) -> ExplicitEvaluation: logging.debug("evaluate alias") evaluation = self.token.evaluate(rulez, navigator) entries = dict() if evaluation.result: curr = navigator.get_curr() entries[self.alias] = rulez.mappings[ curr] if curr in rulez.mappings else curr return ExplicitEvaluation(evaluation.result, entries, [navigator.get_absolute_index() - 1])