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
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)
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)
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)