コード例 #1
0
        def j2valid_trend(j):
            nonlocal entities_list

            if j < 3:
                return False

            j_tuple = j_param_types2j_latest(j, Param.Type.list())
            if any(map(is_none, j_tuple)):
                return False

            entities_tuple = [
                entities_list[j] if j is not None else None for j in j_tuple
            ]
            if any(map(lambda x: len(x) != 1, entities_tuple)):
                return False

            j_portlike, j_tradegood, j_rate, j_trend = j_tuple
            assert_equal(j_trend, j)
            if j_rate != j - 1:
                return False

            if j - 2 not in {j_portlike, j_tradegood}:
                return False

            entity_portlike, entity_tradegood, entity_rate, entity_trend = map(
                l_singleton2obj, entities_tuple)

            if FoxylibEntity.entity2type(
                    entity_portlike) != PortEntity.entity_type(
                    ):  # not culture
                return False

            entity_latter = max([entity_portlike, entity_tradegood],
                                key=FoxylibEntity.entity2span)

            span_latter, span_rate, span_trend = lmap(
                FoxylibEntity.entity2span,
                [entity_latter, entity_rate, entity_trend])

            span_latter_rate = SpanTool.span_pair2between(
                span_latter, span_rate)
            str_between_latter_rate = StringTool.str_span2substr(
                text, span_latter_rate)

            if not RegexTool.pattern_str2match_full(
                    RegexTool.pattern_blank_or_nullstr(),
                    str_between_latter_rate):
                return False

            span_rate_trend = SpanTool.span_pair2between(span_rate, span_trend)
            str_between_rate_trend = StringTool.str_span2substr(
                text, span_rate_trend)
            if not RegexTool.pattern_str2match_full(
                    RegexTool.pattern_blank_or_nullstr(),
                    str_between_rate_trend):
                return False

            return True
コード例 #2
0
    def entity_pair2is_appendable(
        cls,
        text,
        entity_pair,
    ):
        Param = PriceSkillParameter

        entity_type_pair = lmap(FoxylibEntity.entity2type, entity_pair)
        param_type_pair = lmap(Param.Type.entity_type2parameter_type,
                               entity_type_pair)

        for param_type in param_type_pair:
            if param_type not in {Param.Type.PORTLIKE, Param.Type.TRADEGOOD}:
                return False

        param_type_1, param_type_2 = param_type_pair
        if param_type_1 != param_type_2:
            return False

        span_pair = lmap(FoxylibEntity.entity2span, entity_pair)
        text_between = StringTool.str_span2substr(
            text, SpanTool.span_pair2between(*span_pair))
        is_fullmatch = RegexTool.pattern_str2match_full(
            Param.pattern_delim(), text_between)
        if not is_fullmatch:
            return False

        return True
コード例 #3
0
    def str_span_pattern2match_full(cls, str_in, span, pattern):
        from foxylib.tools.regex.regex_tool import RegexTool
        str_sub = cls.str_span2substr(str_in, span)
        if str_sub is None:
            return None

        m = RegexTool.pattern_str2match_full(pattern, str_sub)
        return m
コード例 #4
0
    def str2token_span_list(cls, str_in):
        p_token = cls._pattern_token()
        m_list_all = list(p_token.finditer(str_in))

        p_blank = cls._pattern_blank()
        m_list_nowhitespace = filter(lambda m: not RegexTool.pattern_str2match_full(p_blank, m.group()),
                                     m_list_all)
        span_list = [m.span() for m in m_list_nowhitespace]
        return span_list
コード例 #5
0
    def test_02(self):
        str_in = "hello world"

        p1 = re.compile(r"\w+ \w+")
        m1 = RegexTool.pattern_str2match_full(p1, str_in)
        self.assertIsNotNone(m1)

        p2 = re.compile(r"\w+ \w")
        m2 = RegexTool.pattern_str2match_full(p2, str_in)
        self.assertIsNone(m2)

        p3 = re.compile(r"\w \w+")
        m3 = RegexTool.pattern_str2match_full(p3, str_in)
        self.assertIsNone(m3)

        p4 = re.compile(r"\w* \w*")
        m4 = RegexTool.pattern_str2match_full(p4, str_in)
        self.assertIsNotNone(m4)

        p5 = re.compile(r"H\w* \w*D", re.I)
        m5 = RegexTool.pattern_str2match_full(p5, str_in)
        self.assertIsNotNone(m5)
コード例 #6
0
 def gap2valid(span):
     str_span = SpanTool.list_span2sublist(text_in, span)
     return RegexTool.pattern_str2match_full(cls.pattern_colon(),
                                             str_span)