Пример #1
0
    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])
Пример #2
0
    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])
Пример #3
0
    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])
Пример #4
0
    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])
Пример #5
0
    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, [])
Пример #6
0
    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])
Пример #7
0
    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])