Esempio n. 1
0
    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')
Esempio n. 2
0
 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)
Esempio n. 3
0
    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)
Esempio n. 4
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)
Esempio n. 5
0
    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')
Esempio n. 6
0
    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')
Esempio n. 7
0
    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)