Ejemplo n.º 1
0
    def test_count_word_in_patterns(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        count = graph.count_words_in_patterns()
        self.assertEquals(0, count)
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        pattern = ET.fromstring("<pattern>HELLO</pattern>")
        topic = ET.fromstring("<topic>HELLO</topic>")
        that = ET.fromstring("<that>HELLO</that>")
        template = TemplateWordNode("TEST")
        graph.add_pattern_to_graph(pattern, topic, that, template)

        count = graph.count_words_in_patterns()
        self.assertEquals(1, count)
Ejemplo n.º 2
0
 def test_parse_text_word(self):
     graph = PatternGraph(self._client_context.brain.aiml_parser)
     root = PatternRootNode()
     final_node = graph._parse_text("HELLO", root)
     self.assertIsNotNone(final_node)
     self.assertIsInstance(final_node, PatternWordNode)
     self.assertEqual(final_node.word, "HELLO")
Ejemplo n.º 3
0
    def test_add_pattern_to_graph_basic(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        element = ET.fromstring("<pattern>test1</pattern>")
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root.children)
        self.assertEqual(len(graph.root.children), 1)
        self.assertIsInstance(graph.root.children[0], PatternWordNode)
        self.assertEqual(graph.root.children[0].word, "test1")

        element = ET.fromstring("<pattern>test2</pattern>")
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root.children)
        self.assertEqual(len(graph.root.children), 2)
        self.assertIsInstance(graph.root.children[0], PatternWordNode)
        self.assertEqual(graph.root.children[0].word, "test2")
        self.assertIsInstance(graph.root.children[0], PatternWordNode)
        self.assertEqual(graph.root.children[1].word, "test1")
Ejemplo n.º 4
0
    def test_add_that_to_node_pattern_with_set(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)

        base_node = PatternWordNode("THAT_TEST")

        that_element = ET.fromstring(
            '<that>HELLO <set name="test" /> WORLD</that>')

        end_node = graph.add_that_to_node(that_element, base_node)
        self.assertIsNotNone(end_node)

        self.assertIsNotNone(base_node)
        self.assertIsNotNone(base_node.that)
        self.assertIsInstance(base_node.that, PatternThatNode)

        self.assertTrue(base_node.that.has_children())
        self.assertIsInstance(base_node.that.children[0], PatternWordNode)
        self.assertEqual(base_node.that.children[0].word, "HELLO")

        self.assertTrue(base_node.that.children[0].has_children())
        self.assertIsInstance(base_node.that.children[0].children[0],
                              PatternSetNode)
        self.assertEqual(base_node.that.children[0].children[0].set_name,
                         "TEST")

        self.assertTrue(base_node.that.children[0].children[0].has_children())
        self.assertIsInstance(
            base_node.that.children[0].children[0].children[0],
            PatternWordNode)
        self.assertEqual(
            base_node.that.children[0].children[0].children[0].word, "WORLD")
Ejemplo n.º 5
0
    def test_simple_hash_and_star_at_end(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)

        pattern_element = ET.fromstring("<pattern>A # *</pattern>")
        topic_element = ET.fromstring("<topic>*</topic>")
        that_element = ET.fromstring("<that>*</that>")
        template_node = TemplateNode()

        graph.add_pattern_to_graph(pattern_element, topic_element,
                                   that_element, template_node)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root.children)
        self.assertEqual(len(graph.root.children), 1)

        word_node = graph.root.children[0]
        self.assertIsInstance(word_node, PatternWordNode)
        self.assertEqual(word_node.word, "A")

        self.assertTrue(word_node.has_zero_or_more())
        if word_node.arrow is not None:
            wildcard_node = word_node.arrow
        elif word_node.hash is not None:
            wildcard_node = word_node.hash
        self.assertIsNotNone(wildcard_node)

        self.assertTrue(wildcard_node.has_one_or_more())
        if word_node.star is not None:
            wildcard_node = word_node.star
        elif word_node.underline is not None:
            wildcard_node = word_node.underline
        self.assertIsNotNone(wildcard_node)
Ejemplo n.º 6
0
 def test_parse_text_nothing(self):
     graph = PatternGraph(self._client_context.brain.aiml_parser)
     root = PatternRootNode()
     final_node = graph._parse_text("", root)
     self.assertIsNotNone(final_node)
     self.assertIsInstance(final_node, PatternRootNode)
     self.assertEqual(final_node, root)
Ejemplo n.º 7
0
 def test_parse_text_multiple_words_whitespaces(self):
     graph = PatternGraph(self._client_context.brain.aiml_parser)
     root = PatternRootNode()
     final_node = graph._parse_text("HELLO \t\n\r THERE", root)
     self.assertIsNotNone(final_node)
     self.assertIsInstance(final_node, PatternWordNode)
     self.assertEqual(final_node.word, "THERE")
Ejemplo n.º 8
0
 def test_add_pattern_to_node(self):
     graph = PatternGraph(self._client_context.brain.aiml_parser)
     pattern = ET.fromstring('<pattern>HELLO</pattern>')
     node = graph.add_pattern_to_node(pattern)
     self.assertIsNotNone(node)
     self.assertIsInstance(node, PatternWordNode)
     self.assertEqual(node.word, "HELLO")
Ejemplo n.º 9
0
 def get_tail_from_element_word_whitespaces(self):
     graph = PatternGraph(self._client_context.brain.aiml_parser)
     set_element = ET.fromstring(
         '<set>colour</set>this \t that \n the \r other')
     text = graph.get_tail_from_element(set_element)
     self.assertIsNotNone(text)
     self.assertEquals("this that the other", text)
Ejemplo n.º 10
0
    def test_add_pattern_with_whitepsace(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        element = ET.fromstring("<pattern>\nthis\n that\n the other</pattern>")
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        root = graph.root
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 1)
        self.assertIsInstance(root.children[0], PatternWordNode)

        this = root.children[0]
        self.assertIsNotNone(this)
        self.assertEqual(this.word, "this")
        self.assertEqual(len(this.children), 1)

        that = this.children[0]
        self.assertIsNotNone(that)
        self.assertEqual(that.word, "that")
        self.assertEqual(len(that.children), 1)

        the = that.children[0]
        self.assertIsNotNone(the)
        self.assertEqual(the.word, "the")
        self.assertEqual(len(the.children), 1)

        other = the.children[0]
        self.assertIsNotNone(other)
        self.assertEqual(other.word, "other")
        self.assertEqual(len(other.children), 0)
Ejemplo n.º 11
0
 def test_init_with_root(self):
     root = PatternRootNode()
     graph = PatternGraph(self._client_context.brain.aiml_parser,
                          root_node=root)
     self.assertIsNotNone(graph)
     self.assertIsNotNone(graph.root)
     self.assertIsInstance(graph.root, PatternRootNode)
     self.assertEqual(graph.root, root)
Ejemplo n.º 12
0
    def test_add_pattern_to_graph_one_or_more_last(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        element = ET.fromstring('<pattern>XXX *</pattern>')
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)
Ejemplo n.º 13
0
    def test_node_from_text_oneormore(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        node = graph.node_from_text("_")
        self.assertIsNotNone(node)
        self.assertIsInstance(node, PatternOneOrMoreWildCardNode)

        node = graph.node_from_text("*")
        self.assertIsNotNone(node)
        self.assertIsInstance(node, PatternOneOrMoreWildCardNode)
Ejemplo n.º 14
0
    def test_parse_text_oneormore(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        root = PatternRootNode()
        final_node = graph._parse_text("_", root)
        self.assertIsNotNone(final_node)
        self.assertIsInstance(final_node, PatternOneOrMoreWildCardNode)

        final_node = graph._parse_text("*", root)
        self.assertIsNotNone(final_node)
        self.assertIsInstance(final_node, PatternOneOrMoreWildCardNode)
Ejemplo n.º 15
0
    def test_add_pattern_to_graph_basic_zero_or_more_with_patterns(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')

        element = ET.fromstring('<pattern># HELLO</pattern>')
        template_graph_root = TemplateWordNode("RESPONSE1")
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        element = ET.fromstring('<pattern>WELL HI THERE</pattern>')
        template_graph_root = TemplateWordNode("RESPONSE2")
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)
Ejemplo n.º 16
0
    def test_add_pattern_to_graph_basic_iset(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        element = ET.fromstring(
            '<pattern><iset>word1, word2, word3</iset> A VALUE</pattern>')
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root.children)
        self.assertEqual(len(graph.root.children), 1)
        self.assertIsInstance(graph.root.children[0], PatternISetNode)
Ejemplo n.º 17
0
    def test_duplicates(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        pattern1 = "<pattern>IS A</pattern>"
        pattern2 = "<pattern>IS * <set>article</set> *</pattern>"

        element1 = ET.fromstring(pattern1)
        graph.add_pattern_to_graph(element1, topic_element, that_element,
                                   template_graph_root)
        element2 = ET.fromstring(pattern2)
        graph.add_pattern_to_graph(element2, topic_element, that_element,
                                   template_graph_root)
Ejemplo n.º 18
0
    def test_add_pattern_with_diff_topics_to_graph(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)

        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None
        element = ET.fromstring("<pattern>test1</pattern>")
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        topic_element = ET.fromstring('<topic>topic1</topic>')
        that_element = ET.fromstring('<that>that1</that>')
        template_graph_root = None
        element = ET.fromstring("<pattern>test1</pattern>")
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)
Ejemplo n.º 19
0
    def test_add_topic_to_node_wildcard(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        pattern = ET.fromstring("""
        <pattern>
            HELLO
        </pattern>""")
        pattern_node = graph.add_pattern_to_node(pattern)

        topic = ET.fromstring("""
        <topic>
            *
        </topic>""")
        topic_node = graph.add_that_to_node(topic, pattern_node)
        self.assertIsNotNone(topic_node)
        self.assertIsInstance(topic_node, PatternOneOrMoreWildCardNode)
        self.assertEqual(topic_node.wildcard, "*")
Ejemplo n.º 20
0
    def test_add_pattern_to_graph(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        pattern = ET.fromstring("<pattern>HELLO</pattern>")
        topic = ET.fromstring("<topic>HELLO</topic>")
        that = ET.fromstring("<that>HELLO</that>")
        template = TemplateWordNode("TEST")
        graph.add_pattern_to_graph(pattern, topic, that, template)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root.child(0))
        self.assertIsNotNone(graph.root.child(0).topic)
        self.assertIsNotNone(graph.root.child(0).topic.child(0))
        self.assertIsNotNone(graph.root.child(0).topic.child(0).that)
        self.assertIsNotNone(graph.root.child(0).topic.child(0).that.child(0))
        self.assertIsNotNone(
            graph.root.child(0).topic.child(0).that.child(0).template)
Ejemplo n.º 21
0
    def test_add_pattern_to_graph_basic_bot_name_attrib(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        self._client_context.brain.properties.add_property('bot1', 'val1')

        element = ET.fromstring('<pattern><bot name="bot1" /></pattern>')
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root.children)
        self.assertEqual(len(graph.root.children), 1)
        self.assertIsInstance(graph.root.children[0], PatternBotNode)
        self.assertEqual(graph.root.children[0].property, "bot1")
Ejemplo n.º 22
0
    def test_add_topic_to_node_star(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)

        base_node = PatternWordNode("TOPIC_TEST")

        topic_element = ET.fromstring('<topic>*</topic>')

        end_node = graph.add_topic_to_node(topic_element, base_node)
        self.assertIsNotNone(end_node)

        self.assertIsNotNone(base_node)
        self.assertIsNotNone(base_node.topic)
        self.assertIsInstance(base_node.topic, PatternTopicNode)

        self.assertFalse(base_node.topic.has_children())
        self.assertTrue(base_node.topic.has_wildcard())
        self.assertIsNotNone(base_node.topic.star)
        self.assertEqual(base_node.topic.star.wildcard, "*")
Ejemplo n.º 23
0
    def test_add_that_to_node_star(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)

        base_node = PatternWordNode("THAT_TEST")

        that_element = ET.fromstring('<that>*</that>')

        end_node = graph.add_that_to_node(that_element, base_node)
        self.assertIsNotNone(end_node)

        self.assertIsNotNone(base_node)
        self.assertIsNotNone(base_node.that)
        self.assertIsInstance(base_node.that, PatternThatNode)

        self.assertFalse(base_node.that.has_children())
        self.assertTrue(base_node.that.has_wildcard())
        self.assertIsNotNone(base_node.that.star)
        self.assertEqual(base_node.that.star.wildcard, "*")
Ejemplo n.º 24
0
    def test_add_pattern_to_graph_basic_set_name_attrib(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        self._client_context.brain.sets._sets["SET1"] = [
            "val1", "val2", "val3", "val5"
        ]

        element = ET.fromstring('<pattern><set name="set1" /></pattern>')
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root.children)
        self.assertEqual(len(graph.root.children), 1)
        self.assertIsInstance(graph.root.children[0], PatternSetNode)
        self.assertEqual(graph.root.children[0].set_name, "SET1")
Ejemplo n.º 25
0
    def test_add_pattern_to_graph_basic_one_or_more(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        topic_element = ET.fromstring('<topic>*</topic>')
        that_element = ET.fromstring('<that>*</that>')
        template_graph_root = None

        element = ET.fromstring('<pattern>*</pattern>')
        graph.add_pattern_to_graph(element, topic_element, that_element,
                                   template_graph_root)

        self.assertIsNotNone(graph.root)
        self.assertIsNotNone(graph.root._1ormore_star)
        self.assertIsInstance(graph.root._1ormore_star,
                              PatternOneOrMoreWildCardNode)
        self.assertEqual(graph.root._1ormore_star.wildcard, "*")

        self.assertEqual(len(graph.root._priority_words), 0)
        self.assertIsNone(graph.root._0ormore_arrow)
        self.assertIsNone(graph.root._0ormore_hash)
        self.assertIsNone(graph.root._1ormore_underline)
Ejemplo n.º 26
0
    def test_add_that_to_node_word(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        pattern = ET.fromstring("""
        <pattern>
            HELLO
        </pattern>""")
        pattern_node = graph.add_pattern_to_node(pattern)

        topic = ET.fromstring("""
        <topic>
            THERE
        </topic>""")
        topic_node = graph.add_that_to_node(topic, pattern_node)

        that = ET.fromstring("""
        <that>
            HERE
        </that>""")
        that_node = graph.add_that_to_node(that, topic_node)
        self.assertIsNotNone(that_node)
        self.assertIsInstance(that_node, PatternWordNode)
        self.assertEqual(that_node.word, "HERE")
Ejemplo n.º 27
0
    def test_add_topic_to_node_pattern(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)

        base_node = PatternWordNode("TOPIC_TEST")

        topic_element = ET.fromstring('<topic>HELLO WORLD</topic>')

        end_node = graph.add_topic_to_node(topic_element, base_node)
        self.assertIsNotNone(end_node)

        self.assertIsNotNone(base_node)
        self.assertIsNotNone(base_node.topic)
        self.assertIsInstance(base_node.topic, PatternTopicNode)

        self.assertTrue(base_node.topic.has_children())
        self.assertIsInstance(base_node.topic.children[0], PatternWordNode)
        self.assertEqual(base_node.topic.children[0].word, "HELLO")

        self.assertTrue(base_node.topic.children[0].has_children())
        self.assertIsInstance(base_node.topic.children[0].children[0],
                              PatternWordNode)
        self.assertEqual(base_node.topic.children[0].children[0].word, "WORLD")
Ejemplo n.º 28
0
    def test_add_template_to_node(self):
        graph = PatternGraph(self._client_context.brain.aiml_parser)
        pattern = ET.fromstring("""
        <pattern>
            HELLO
        </pattern>""")
        pattern_node = graph.add_pattern_to_node(pattern)

        topic = ET.fromstring("""
        <topic>
            THERE
        </topic>""")
        topic_node = graph.add_that_to_node(topic, pattern_node)

        that = ET.fromstring("""
        <that>
            *
        </that>""")
        that_node = graph.add_that_to_node(that, topic_node)

        template = TemplateWordNode("TEST")
        template_node = graph.add_template_to_node(template, that_node)
        self.assertIsNotNone(template_node)
        self.assertIsInstance(template_node, PatternTemplateNode)
Ejemplo n.º 29
0
 def create_pattern_graph(self):
     return PatternGraph(aiml_parser=self)
Ejemplo n.º 30
0
 def test_node_from_element_bot(self):
     bot_element = ET.fromstring('<bot>name</bot>')
     graph = PatternGraph(self._client_context.brain.aiml_parser)
     node = graph.node_from_element(bot_element)
     self.assertIsNotNone(node)
     self.assertIsInstance(node, PatternBotNode)