def test_insert(self):
     bt = BinaryTree()
     bt.insert(Node(3))
     bt.insert(Node(1))
     bt.insert(Node(5))
     self.assertLess(bt.root.value, bt.root.right.value)
     self.assertLess(bt.root.left.value, bt.root.value)
Пример #2
0
 def test_init(self):
     node = Node()
     self.assertEqual(node.value, None)
     self.assertEqual(node.left, None)
     self.assertEqual(node.right, None)
     r = random()
     node = Node(r)
     self.assertEqual(node.value, r)
     self.assertEqual(node.left, None)
     self.assertEqual(node.right, None)
Пример #3
0
 def __get_random_embedded_node(self, size):
     """
     size: int
     return: list[Node]
     """
     list_ = []
     while len(list_) < size:
         # continuous
         if random() < 0.5:
             # duplicate
             while True and len(list_) < size:
                 list_.append(InfoNodeDecorator(Node(randint(0, size))))
                 if random() < 0.5:
                     break
     return list_
Пример #4
0
def get_grammar(text, line_count):
    blacklist = [
        "-NONE-", "-LRB-", "-RRB-", "(' ')", "(\" \")", "(` `)", "(. .))",
        "(`` ``)"
    ]

    eof_txt = "(TOP END_OF_TEXT_UNIT)"

    root_nodes = []
    temp = ""
    root_node = ""
    current_node = ""

    i = 0
    tag_count = 0
    not_back = 0
    data_insert = 1

    for line in text:
        #print(i)
        temp = line.strip()
        check_alpha = re.sub(r'[^a-zA-Z$]', ' ', temp)
        check_alpha = check_alpha.strip()

        if check_alpha == "":
            pass

        elif eof_txt in temp:
            if root_node != "":
                root_nodes.append(root_node)
                root_node = ""
                current_node = ""
                tag_count = 0
        else:
            if "(TOP (" in temp:
                temp = temp.split('(TOP ', 1)
                temp = temp[1]
                temp = ''.join(temp)

            if "(" in temp:
                while (temp[0] == "("):
                    temp = temp[1:]
                    temp = temp.split(' ', 1)
                    if temp[0].strip() not in blacklist:
                        tag_count += 1
                        non_terminal = temp[0]
                        non_terminal = re.sub(r'[^a-zA-Z$]', ' ', non_terminal)
                        non_terminal = non_terminal.strip()

                        if tag_count == 1:
                            if non_terminal != "":
                                root_node = Node(name=non_terminal)
                                current_node = root_node
                            else:
                                not_back = 1

                        else:
                            if current_node != "":
                                if non_terminal != "":
                                    new_node = Node(name=non_terminal)
                                    current_node.add_child(new_node)
                                    current_node = current_node.get_last_child(
                                    )

                                else:
                                    not_back = 1

                    else:

                        not_back = 1
                        data_insert = 0

                    temp = temp[1:]
                    temp = ' '.join(temp)

                if ")" in temp:
                    lex_i = 0

                    while (")" in temp):
                        temp2 = temp
                        temp = temp.split(')', 1)
                        temp = temp[1:]
                        temp = ')'.join(temp)

                        if not_back == 1 and lex_i == 0:
                            not_back = 0
                            continue

                        elif lex_i == 0 and data_insert == 1:
                            temp2 = temp2.split(")")
                            temp2 = temp2[0]
                            temp2 = "".join(temp2)
                            temp2 = temp2.strip()

                            if temp2 != "" and current_node != "":
                                current_node.set_data(temp2)

                        lex_i += 1

                        if current_node != "" and current_node != root_node:
                            current_node = current_node.get_parent()

                not_back = 0
                data_insert = 1
        i += 1

        if line_count != -1 and i > line_count:
            break

    return root_nodes
Пример #5
0
from lib.tree import Node, BinaryTree, BinaryTreeTraverseDecorator
"""
                  10
             /
         5                  15
     /                    /
    2         8         13       17
   /         /         /        /
  N   4     6   N    12    N   N    18
     /     /        /              /
    3   N N   7    11   N         N    19
"""
empty_binary_tree = BinaryTree()
binary_tree = BinaryTree()
n10 = Node(10)
n5 = Node(5)
n2 = Node(2)
n4 = Node(4)
n3 = Node(3)
n8 = Node(8)
n6 = Node(6)
n7 = Node(7)
n15 = Node(15)
n13 = Node(13)
n12 = Node(12)
n11 = Node(11)
n17 = Node(17)
n18 = Node(18)
n19 = Node(19)
binary_tree.insert(n10)
Пример #6
0
 def test_copy(self):
     r = random()
     node1 = Node(r)
     node2 = node1.copy()
     node1.value = r * -1 + 1
     self.assertNotEqual(node1.value, node2.value)
Пример #7
0
 def test_right_property(self):
     r = random()
     node = Node()
     right_node = Node(r)
     node.right = right_node
     self.assertEqual(node.right, right_node)
Пример #8
0
 def test_left_property(self):
     r = random()
     node = Node()
     left_node = Node(r)
     node.left = left_node
     self.assertEqual(node.left, left_node)
Пример #9
0
 def test_value_property(self):
     r = random()
     node = Node()
     node.value = r
     self.assertEqual(node.value, r)