def is_neg_graph2(graph, begin, end): """ Return True if the sentence is like "without [begin, end]" """ # without n [, n] state = 0 # sort nodes for node in sorted(graph.nodes(), key=lambda n: graph.node[n]['start']): if graph.node[node]['end'] > end: break if state == 0: if graph.node[node]['lemma'] in ('without', 'no', 'resolve', 'resolution', 'rosolution'): state = 1 elif state == 1: if graph.node[node]['tag'].startswith('N'): state = 1 if utils.intersect( (begin, end), (graph.node[node]['start'], graph.node[node]['end'])): return True elif graph.node[node]['tag'] in ('JJ', 'CC', ',', 'VBN'): state = 1 else: return False return False
def test_intersect(): assert intersect((0, 1), (.5, .9)) assert not intersect((0, 1), (-1, 0)) assert intersect((0, 1), (-1, .1)) assert not intersect((0, 1), (1, 2)) assert intersect((0, 1), (.9, 2)) assert intersect((.5, .9), (0, 1))
def find_nodes(graph, begin, end): for node in graph.nodes(): if utils.intersect( (begin, end), (graph.node[node]['start'], graph.node[node]['end'])): yield node
def find_nodes(graph, begin, end): for node in graph.nodes(): node_start = graph.nodes[node]['start'] node_end = graph.nodes[node]['end'] if utils.intersect((begin, end), (node_start, node_end)): yield node