Beispiel #1
0
class BinaryTreeSearch:
    def __init__(self, fileName):
        self.tree = BinaryTree()
        with open(fileName) as f:
            flag = False
            lastWord = ''
            preLastWord = ''
            oneWordLineWord = ''
            for line in f:
                words = re.split(r'\W+|\d+|_+', line)
                words = list(filter(bool, words))
                if len(words) == 0: continue
                if oneWordLineWord != '':
                    words.insert(0, oneWordLineWord)
                    oneWordLineWord = ''
                if len(words) == 1:
                    oneWordLineWord = words[0].lower()
                    continue
                if flag:
                    #pre last first
                    node = self.tree.find(
                        NodeWithData.makeKey(preLastWord, lastWord))
                    if node == None:
                        node = NodeWithData(preLastWord, lastWord)
                        self.tree.add(node)
                    node.UpdateDict(preLastWord, lastWord, words[0].lower())
                    #last first second
                    node = self.tree.find(
                        NodeWithData.makeKey(lastWord, words[0].lower()))
                    if node == None:
                        node = NodeWithData(lastWord, words[0].lower())
                        self.tree.add(node)
                    node.UpdateDict(lastWord, words[0].lower(),
                                    words[1].lower())
                else:
                    flag = True
                lastWord = words[-1].lower()
                preLastWord = words[-2].lower()
                for i in range(len(words) - 2):
                    w1 = words[i].lower()
                    w2 = words[i + 1].lower()
                    node = self.tree.find(NodeWithData.makeKey(w1, w2))
                    if node == None:
                        node = NodeWithData(w1, w2)
                        self.tree.add(node)
                    node.UpdateDict(w1, w2, words[i + 2].lower())
            if oneWordLineWord + preLastWord + lastWord != '':
                node = self.tree.find(
                    NodeWithData.makeKey(preLastWord, lastWord))
                if node == None:
                    node = NodeWithData(preLastWord, lastWord)
                    self.tree.add(node)
                node.UpdateDict(preLastWord, lastWord, oneWordLineWord)

    def search(self, first, second):
        first, second = first.lower(), second.lower()
        key = NodeWithData.makeKey(first, second)
        node = self.tree.find(key)
        if node == None: return []
        return node.GetTrigrams(first, second)
 def test_delete(self):
     var = globalVar() #Contains variables for tree insertion 
     bTree = BinaryTree()
     bTree.insert(value= var.p1)
     bTree.insert(value= var.p2)
     bTree.insert(value= var.p3)
     self.assertEqual(bTree.find(var.p3).value, var.p3)
     bTree.delete(var.p3)
     with self.assertRaises(Exception): 
         bTree.find(var.p3).value#Looking for deleted element
 def test_find(self):
     var = globalVar() #Contains variables for tree insertion 
     bTree = BinaryTree()
     bTree.insert(value= var.p1)
     bTree.insert(value= var.p2)
     bTree.insert(value= var.p3)
     bTree.insert(value= var.p5)
     bTree.insert(value= var.p4)
     self.assertEqual(bTree.find(var.p1).value, var.p1)
     self.assertEqual(bTree.find(var.p4).value, var.p4)
Beispiel #4
0
    def test_features(self):
        bt = BinaryTree(10)
        bt.add(6)
        bt.add(18)
        bt.add(4)
        bt.add(8)
        bt.add(15)
        bt.add(21)

        self.assertEqual(bt.count(), 7)
        self.assertEqual(bt.min(), 4)
        self.assertEqual(bt.max(), 21)
        self.assertEqual(bt.has(8), True)
        self.assertEqual(bt.has(11), False)
        self.assertNotEqual(bt.find(15), None)
        self.assertEqual(bt.find(11), None)
        bt.delete(10)
        self.assertEqual(bt.root.data, 15)
        self.assertEqual(bt.find(10), None)
        self.assertEqual(bt.count(), 6)
        self.assertEqual([x for x in bt.items()], [4, 6, 8, 15, 18, 21])
        self.assertEqual([x for x in bt.items('pre')], [15, 6, 4, 8, 18, 21])
        self.assertEqual([x for x in bt.items('pos')], [4, 8, 6, 21, 18, 15])
        self.assertEqual([x for x in bt.items('lev')], [15, 6, 18, 4, 8, 21])