def test_pattern_graph_structure1(self): pattern = pattern_pfx + ''' <pattern name="ex" class="ex-patterns"> <word pos="JJ" min="1"/> <word pos="IN" min="0"/> <word pos="NN" min="1" max="2"/> </pattern>''' tree = etree.fromstring(pattern) # print('\n') # print debug information # pattern = Pattern(tree, True) pattern = Pattern(tree) self.assertTrue(pattern.graph.is_directed()) starting = pattern.graph_entry_points[0] successor = None for x in pattern.graph.successors(starting): successor = x break successors2 = [] for node in pattern.graph.successors(successor): successors2.append(node._pos) self.assertTrue(successors2[0] == 'NN') self.assertTrue(successors2[1] == 'NN')
def test_pattern_graph_exit_points2(self): pattern = pattern_pfx + ''' <pattern name="ex" class="ex-patterns"> <word pos="JJ" min="1"/> <word pos="NN" min="1" max="2"/> </pattern>''' tree = etree.fromstring(pattern) pattern = Pattern(tree) is_correct_length = len(pattern.graph_exit_points) == 1 contains_node1 = pattern.graph_exit_points[0]._pos == 'NN' self.assertTrue(is_correct_length) self.assertTrue(contains_node1)
def test_pattern_graph_matches5(self): pattern = pattern_pfx + ''' <pattern name="ex" class="ex-patterns"> <word lemma="word*" /> <word word="abcd" /> </pattern>''' tree = etree.fromstring(pattern) pattern = Pattern(tree) sentence = "He is running the race by eating the the mungo." annotator = BasicNltkAnnotator() annotated_sentence = annotator.annotate(sentence) bfs_search = BreadthFirstWithQueue() matches = MatchBuilder.find_all_matches(annotated_sentence, pattern, bfs_search) self.assertEqual(len(matches), 0)
def test_pattern_graph_matches4(self): pattern = pattern_pfx + ''' <pattern name="ex" class="ex-patterns"> <word pos="VB*" /> <word pos="DT" min="2"/> </pattern>''' tree = etree.fromstring(pattern) pattern = Pattern(tree) sentence = "He is running the race by eating the the mungo." annotator = BasicNltkAnnotator() annotated_sentence = annotator.annotate(sentence) bfs_search = BreadthFirstWithQueue() matches = MatchBuilder.find_all_matches(annotated_sentence, pattern, bfs_search) actual = ' '.join([x.word for x in matches[0]]) expected = 'eating the the' self.assertEqual(actual, expected)
def test_pattern_graph_successors1(self): pattern = pattern_pfx + ''' <pattern name="ex" class="ex-patterns"> <word pos="JJ" min="1"/> <word pos="IN" min="0"/> <word pos="NN" min="1" max="2"/> </pattern>''' tree = etree.fromstring(pattern) pattern = Pattern(tree) self.assertTrue(pattern.graph.is_directed()) # starting_node = pattern.graph.nodes(data=pattern.graph_entry_points[0]) starting = pattern.graph_entry_points[0] successors = [] for succ in pattern.graph.successors(starting): successors.append(succ._pos) self.assertTrue(starting._pos == 'JJ') self.assertTrue(successors[0] == 'IN') self.assertTrue(successors[1] == 'NN')
def test_pattern_graph_matches3(self): pattern = pattern_pfx + ''' <pattern name="ex" class="ex-patterns"> <word pos="DT" min="0"/> <word pos="NN*" /> </pattern>''' tree = etree.fromstring(pattern) pattern = Pattern(tree) sentence = "This is the dog who barks at moons." annotator = BasicNltkAnnotator() annotated_sentence = annotator.annotate(sentence) bfs_search = BreadthFirstWithQueue() matches = MatchBuilder.find_all_matches(annotated_sentence, pattern, bfs_search) actual1 = ' '.join([x.word for x in matches[0]]) self.assertEqual(actual1, 'the dog') actual2 = ' '.join([x.word for x in matches[1]]) self.assertEqual(actual2, 'dog') actual3 = ' '.join([x.word for x in matches[2]]) self.assertEqual(actual3, 'moons')
def test_pattern_graph_matches2(self): pattern = pattern_pfx + ''' <pattern name="ex" class="ex-patterns"> <word pos="JJ*" /> <word pos="NN*" /> </pattern>''' tree = etree.fromstring(pattern) pattern = Pattern(tree) sentence = "He has a big dog that lives in the green house." annotator = BasicNltkAnnotator() annotated_sentence = annotator.annotate(sentence) bfs_search = BreadthFirstWithQueue() matches = MatchBuilder.find_all_matches(annotated_sentence, pattern, bfs_search) actual1 = ' '.join([x.word for x in matches[0]]) expected1 = 'big dog' actual2 = ' '.join([x.word for x in matches[1]]) expected2 = 'green house' self.assertEqual(actual1, expected1) self.assertEqual(actual2, expected2)