示例#1
0
 def _get_aligned_date(self, node, amr):
     date = Date(node, amr.graph)
     if len(date.attributes) + len(date.edges) == 0:
         return date
     alignment = date._get_alignment(amr)
     date._get_span(alignment, amr)
     return date
示例#2
0
 def recategorize_date_nodes(self, amr):
     graph = amr.graph
     dates = []
     for node, _, _ in graph.get_list_node(replace_copy=False):
         if node.copy_of is not None:
             continue
         if graph.is_date_node(node) and Date.collapsable(node, graph):
             self.date_entity_count += 1
             date = Date(node=node, graph=graph)
             dates.append(date)
     self._collapse_date_nodes(dates, amr)
示例#3
0
 def recategorize_date_nodes(self, amr):
     graph = amr.graph
     dates = []
     for node, _, _ in graph.get_list_node(replace_copy=False):
         if node.copy_of is not None:
             continue
         if graph.is_date_node(node) and Date.collapsable(node, graph):
             self.date_entity_count += 1
             date = self._get_aligned_date(node, amr)
             if date.span is not None:
                 self.recat_date_entity_count += 1
             dates.append(date)
     dates, removed_dates = resolve_conflict_entities(dates)
     Date.collapse_date_nodes(dates, amr)
示例#4
0
    def _collapse_date_nodes(self, dates, amr):
        if amr.abstract_map is None:
            amr.abstract_map = {}
        
        align_count = 0
        for date in dates:
            align_count += 1
            abstract = '{}_{}'.format(date.ner_type, align_count)
            span_with_offset = []
            amr.abstract_map[abstract] = Date.save_collapsed_date_node(
                date, span_with_offset, amr)

            # Remove edges
            for source, target in list(amr.graph._G.edges(date.node)):
                edge_label = amr.graph._G[source][target]['label']
                if edge_label in Date.edge_list:
                    amr.graph.remove_edge(source, target)
                    amr.graph.remove_subtree(target)
            # Update instance
            amr.graph.replace_node_attribute(date.node, 'instance', 'date-entity', abstract)
            # Remove attributes
            for attr, value in date.attributes.items():
                amr.graph.remove_node_attribute(date.node, attr, value)