예제 #1
0
    def _parse_compare(self, op_tokens, arg_tokens):
        if len(op_tokens) >= 3:
            if normalize(op_tokens[1]) == 'more':
                return (normalize(op_tokens[2]), False)
            elif normalize(op_tokens[1]) == 'less':
                return (normalize(op_tokens[2]), True)

        token = normalize(op_tokens[1])
        if token.endswith('er'):
            token = token[:-2]
            if token.endswith('i'):
                token = token[:-1] + 'y'

        return (token, False)
예제 #2
0
    def parse_question(self, question, discard_global):
        # Filter out 'global' questions
        if discard_global and question['semantic'][0][
                'operation'] == 'select' and question['semantic'][0][
                    'argument'] == 'scene':
            return None

        ops, args, deps = self.parse_program(question['semantic'])
        if None in ops or None in args:
            return None

        # Combine all 'verify_attr-and' to 'verify_attrs'
        trace, _ = self._compute_op_trace(ops, deps)
        ops, args, deps, trace = self._combine_verify(ops, args, deps, trace)

        if self._is_batch_format:
            question['program'] = self._de_branch_program(ops, args, deps)
            question['program'] = self._fix_logical_branches(
                question['program'])
        else:
            question['operators'] = ops
            question['arguments'] = args
            question['dependencies'] = deps

        question['answer'] = normalize(question['answer'])
        # print(question['semantic'], ' ---> ', ops, args, deps)
        return question
예제 #3
0
 def _parse_two_different(self, op_tokens, arg_tokens):
     op_tokens = [normalize(t) for t in op_tokens[1:]]
     return (' '.join(op_tokens), )
예제 #4
0
 def _parse_all_different(self, op_tokens, arg_tokens):
     return (normalize(arg_tokens[0]), )
예제 #5
0
 def _parse_all_same(self, op_tokens, arg_tokens):
     return (normalize(arg_tokens[0]), )
예제 #6
0
 def _parse_verify_rel(self, op_tokens, arg_tokens):
     return (normalize(arg_tokens[1]), arg_tokens[2] == 's',
             normalize(arg_tokens[0]))
예제 #7
0
 def _parse_choose_rel(self, op_tokens, arg_tokens):
     rels = re.split('\|', arg_tokens[1])
     rels = [normalize(r) for r in rels]
     return (rels, arg_tokens[2] == 's', normalize(arg_tokens[0]))
예제 #8
0
 def _parse_verify_attrs(self, op_tokens, arg_tokens):
     return ([normalize(t) for t in arg_tokens], )
예제 #9
0
 def _parse_verify_attr(self, op_tokens, arg_tokens):
     return (normalize(arg_tokens[0]), )
예제 #10
0
 def _parse_choose_attr(self, op_tokens, arg_tokens):
     arg_tokens = re.split('\|', arg_tokens[0])
     return ([normalize(t) for t in arg_tokens], )
예제 #11
0
 def _parse_filter(self, op_tokens, arg_tokens):
     return (normalize(arg_tokens[0]), )
예제 #12
0
 def _parse_select(self, op_tokens, arg_tokens):
     return (normalize(arg_tokens[0]), )