Пример #1
0
def char_level_drs(new_clauses, sep):
    '''Return to string format, use char-level for concepts'''
    return_strings = []
    keep_word = ['"now"', '"speaker"', '"hearer"', '"+"']
    for cur_clause in new_clauses:
        ret_str = ''
        for idx, item in enumerate(cur_clause):
            if between_quotes(item) and cur_clause[1] == 'Name' and idx == 3:
                item = " ".join(item)
            # Items between quotes are characters, except the ones in keep_word
            elif between_quotes(item) and item not in keep_word:
                item = " ".join(cur_clause[idx])
            elif idx == 1 and not is_operator(item) and not is_role(item):
                # Concepts and roles are kept as is
                item = " ".join(item)
            ret_str += ' ' + item + ' ' + sep
        return_strings.append(" ".join(ret_str.rstrip(sep).strip().split()))
    return return_strings
Пример #2
0
 def rewrite_length_four(self, cur_clause):
     '''Rewrite clauses of length 4, only rewrites, no introductions'''
     first_var = self.get_box_var(cur_clause[0])
     second_var, third_var = cur_clause[2], cur_clause[3]  # defaults
     # Only rewrite items that are not between quotes (so variables)
     if not between_quotes(cur_clause[2]):
         if cur_clause[1] in op_boxes:
             second_var = self.get_box_var(cur_clause[2])
         else:
             second_var = self.get_disc_var(cur_clause[2])
     # Now for the third variable
     if not between_quotes(cur_clause[3]):
         if cur_clause[1] in op_boxes + ["PRP"]:
             third_var = self.get_box_var(cur_clause[3])
         else:
             third_var = self.get_disc_var(cur_clause[3])
     self.new_clauses.append(
         [first_var, cur_clause[1], second_var, third_var])
Пример #3
0
    def rewrite_length_four(self, cur_clause):
        '''Rewrite clauses of length four in relative manner'''
        first_var = self.get_variable(cur_clause[0], True)
        second_var, third_var = cur_clause[2], cur_clause[3]  # defaults
        # First do second variable, then do third variable
        if not between_quotes(cur_clause[2]):
            second_var = self.get_variable(cur_clause[2], cur_clause[1] in op_boxes)
        if not between_quotes(cur_clause[3]):
            third_var = self.get_variable(cur_clause[3], cur_clause[1] in op_boxes + self.extra_third_var_boxes)

        # Fix sense if model didn't produce one
        if is_concept(cur_clause[1]) and not between_quotes(cur_clause[2]):
            self.pp_info.pp_dict["no-sense"].append(self.pp_info.cur_idx)
            second_var = self.default_sense
        # If fourth item is not between quotes for name, add "tom"
        if not between_quotes(cur_clause[3]) and cur_clause[1] == "Name":
            pass
            # third_var = '"tom"'
        else:
            # Add the final clause
            self.new_clauses.append([first_var, cur_clause[1], second_var, third_var])
Пример #4
0
def is_disc_ref(main_item, item, clause_idx):
    '''Return whether item is discourse variable, given main_item and position in the clause'''
    if main_item == "PRP":
        return clause_idx == 2
    return main_item not in op_boxes and not between_quotes(item)
Пример #5
0
def rewrite_drss_absolute(drs):
    '''Rewrite DRS variables to a more general standard -- absolute naming'''
    new_clauses = []
    box_dict, var_dict = {}, {}  #dicts to keep track of variable names
    box_id, var_id = '$', '@'

    for cur_clause in drs:
        # Clause has 3 items
        if len(cur_clause) == 3:
            # Rewrite box variable
            first_var, box_dict = get_from_dict(cur_clause[0], box_dict,
                                                box_id)
            if cur_clause[1] in op_boxes:  #handle box variables
                second_var, box_dict = get_from_dict(cur_clause[2], box_dict,
                                                     box_id)
                new_clauses.append([first_var, cur_clause[1], second_var])
            else:
                second_var, var_dict = get_from_dict(cur_clause[2], var_dict,
                                                     var_id)
                new_clauses.append([first_var, cur_clause[1], second_var])

        # Clause has 4 items
        else:
            first_var, box_dict = get_from_dict(cur_clause[0], box_dict,
                                                box_id)
            # Second item is an operator
            if is_operator(cur_clause[1]):
                # Handle second variable
                second_var, third_var = cur_clause[2], cur_clause[3]  #defaults
                if not between_quotes(cur_clause[2]):
                    if not (cur_clause[1] in op_boxes
                            and cur_clause[1] != 'PRP'):
                        second_var, var_dict = get_from_dict(
                            cur_clause[2], var_dict, var_id)
                # Handle third variable (if there)
                if not between_quotes(cur_clause[3]):
                    if cur_clause[1] == 'PRP':
                        second_var, var_dict = get_from_dict(
                            cur_clause[2], var_dict, var_id)
                        third_var, box_dict = get_from_dict(
                            cur_clause[3], box_dict, box_id)
                    elif cur_clause[1] in op_boxes:
                        second_var, box_dict = get_from_dict(
                            cur_clause[2], box_dict, box_id)
                        third_var, box_dict = get_from_dict(
                            cur_clause[3], box_dict, box_id)
                    else:
                        third_var, var_dict = get_from_dict(
                            cur_clause[3], var_dict, var_id)
                new_clauses.append(
                    [first_var, cur_clause[1], second_var, third_var])
            # Second item is a role
            elif is_role(cur_clause[1]):
                second_var, var_dict = get_from_dict(cur_clause[2], var_dict,
                                                     var_id)
                if not between_quotes(cur_clause[3]):
                    third_var, var_dict = get_from_dict(
                        cur_clause[3], var_dict, var_id)
                else:
                    third_var = cur_clause[3]
                new_clauses.append(
                    [first_var, cur_clause[1], second_var, third_var])
            # Otherwise it must be a concept (b1 work "v.01" x2)
            else:
                third_var, var_dict = get_from_dict(cur_clause[3], var_dict,
                                                    var_id)
                new_clauses.append(
                    [first_var, cur_clause[1], cur_clause[2], third_var])
    return new_clauses
Пример #6
0
def rewrite_drss_relative(drs):
    '''Rewrite DRS variables to a more general standard -- relative naming'''
    # Get order of REFs
    var_order = [x[2] for x in drs if x[1] == 'REF']
    new_clauses, vars_seen, boxes_seen = [], [], []
    cur_var = 0

    for cur_clause in drs:
        # Clause has 3 items
        if len(cur_clause) == 3:
            # Rewrite box variable
            first_var, boxes_seen, new_clauses = get_box_var(
                cur_clause[0], boxes_seen, new_clauses)
            # REF is a special case, it introduces a variable
            if cur_clause[1] == 'REF':
                new_clauses.append([first_var, cur_clause[1]])
                cur_var += 1  #saw a new var, so increase cur_var
            elif cur_clause[1] in op_boxes:  #handle box variables
                second_var, boxes_seen, new_clauses = get_box_var(
                    cur_clause[2], boxes_seen, new_clauses)
                new_clauses.append([first_var, cur_clause[1], second_var])
            else:  #otherwise treat it as a discourse variable
                second_var, vars_seen = new_var_name(cur_clause[2], var_order,
                                                     cur_var, vars_seen)
                new_clauses.append([first_var, cur_clause[1], second_var])
        # Clause has 4 items
        else:
            first_var, boxes_seen, new_clauses = get_box_var(
                cur_clause[0], boxes_seen, new_clauses)
            # Second item is an operator
            if is_operator(cur_clause[1]):
                # Handle second variable
                second_var, third_var = cur_clause[2], cur_clause[3]  #defaults
                if not between_quotes(cur_clause[2]):
                    if not (cur_clause[1] in op_boxes
                            and cur_clause[1] != 'PRP'):
                        second_var, vars_seen = new_var_name(
                            cur_clause[2], var_order, cur_var, vars_seen)
                # Handle third variable (if there)
                if not between_quotes(cur_clause[3]):
                    if cur_clause[1] == 'PRP':
                        second_var, vars_seen = new_var_name(
                            cur_clause[2], var_order, cur_var, vars_seen)
                        third_var, boxes_seen, new_clauses = get_box_var(
                            cur_clause[3], boxes_seen, new_clauses)
                    elif cur_clause[1] in op_boxes:
                        second_var, boxes_seen, new_clauses = get_box_var(
                            cur_clause[2], boxes_seen, new_clauses)
                        third_var, boxes_seen, new_clauses = get_box_var(
                            cur_clause[3], boxes_seen, new_clauses)
                    else:
                        third_var, vars_seen = new_var_name(
                            cur_clause[3], var_order, cur_var, vars_seen)
                new_clauses.append(
                    [first_var, cur_clause[1], second_var, third_var])
            # Second item is a role
            elif is_role(cur_clause[1]):
                second_var, third_var = cur_clause[2], cur_clause[3]
                if not between_quotes(cur_clause[2]):
                    second_var, vars_seen = new_var_name(
                        cur_clause[2], var_order, cur_var, vars_seen)
                if not between_quotes(cur_clause[3]):
                    third_var, vars_seen = new_var_name(
                        cur_clause[3], var_order, cur_var, vars_seen)
                new_clauses.append(
                    [first_var, cur_clause[1], second_var, third_var])
            # Otherwise it must be a concept (b1 work "v.01" x2)
            else:
                third_var = cur_clause[3]
                if not between_quotes(cur_clause[3]):
                    third_var, vars_seen = new_var_name(
                        cur_clause[3], var_order, cur_var, vars_seen)
                new_clauses.append(
                    [first_var, cur_clause[1], cur_clause[2], third_var])
    return new_clauses