Ejemplo n.º 1
0
        public void Mine_NoDuplicateSymbols_DiscoverAllFrequents_01()
        {
            var treeSet = new List <ITextTree>();

            const string t1 = "A,B,^,C,D,^,E,^,^,F,G,H,^,I,^,^,J,K,^,L,^,^,^,^";

            treeSet.Add(TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree("001 " + t1, Global.Seperator, Global.BackTrack));


            var miningParams = new MiningParams(SubtreeType.Induced,
                                                Ordered,
                                                Frequent,
                                                !Closed,
                                                !Maximal,
                                                SupportType.Hybrid,
                                                RootOccurrenceThreshold1,
                                                TransactionThreshold1,
                                                Global.Seperator,
                                                Global.BackTrack);

            var actual = CCTreeMinerV2.CCTreeMiner.Mine(treeSet, miningParams);

            var numberFrequent = treeSet[0].InducedSubPatternUpperBound();

            Assert.AreEqual(numberFrequent, actual.FrequentPatternsCount);
        }
Ejemplo n.º 2
0
        public static List <ITextTree> ReadForestFromFile(string path, char seperator, NodeSymbol backTrack)
        {
            if (string.IsNullOrEmpty(backTrack))
            {
                throw new ArgumentNullException("backTrack");
            }

            var forest = new List <ITextTree>();

            using (var f = new FileInfo(path).OpenText())
            {
                string treeInString;

                while ((treeInString = f.ReadLine()) != null)
                {
                    if (string.IsNullOrEmpty(treeInString) || treeInString.StartsWith("//"))
                    {
                        continue;
                    }

                    var tree = TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree(
                        treeInString, seperator, backTrack);

                    if (tree == null)
                    {
                        continue;
                    }

                    forest.Add(tree);
                }
            }

            return(forest);
        }
Ejemplo n.º 3
0
        public void Mine_OrderedVsUnordered_01_Ordered()
        {
            var treeSet = new List <ITextTree>();

            var trees = treesInducedOrderedVsUnordered01;

            for (var treeId = 1; treeId <= trees.Length; treeId++)
            {
                treeSet.Add(TextTreeBuilder <TextTree, TreeNode> .
                            ConvertToTextTree(string.Format("{0:000} {1}", treeId, trees[treeId - 1]), Global.Seperator, Global.BackTrack));
            }

            var miningParams = new MiningParams(SubtreeType.Induced,
                                                Ordered,
                                                !Frequent,
                                                Closed,
                                                Maximal,
                                                SupportType.Hybrid,
                                                RootOccurrenceThreshold2,
                                                TransactionThreshold2,
                                                Global.Seperator,
                                                Global.BackTrack);

            var actual = CCTreeMinerV2.CCTreeMiner.Mine(treeSet, miningParams);

            const int numberClosed  = 11;
            const int numberMaximal = 7;

            Assert.AreEqual(numberClosed, actual.ClosedPatternsCount);
            Assert.AreEqual(numberMaximal, actual.MaximalPatternsCount);

            var maximals = new[]
            {
                "A,B,B,D,^,^,^,B,B,^,^,^",
                "A,B,B,D,^,^,^,C,C,^,^,^",
                "A,B,B,E,^,^,^,B,B,^,^,^",
                "A,B,B,E,^,^,^,C,C,^,^,^",
                "A,B,B,^,^,B,B,^,^,B,B,^,^,^",
                "A,B,B,^,^,B,B,^,^,C,C,^,^,^",
                "A,B,B,^,^,B,B,^,^,C,C,^,^,^"
            };

            foreach (var maximal in maximals)
            {
                Assert.IsTrue(Array.Exists(actual.MaximalPatterns, pt => pt.PreorderString.Equals(maximal)));
            }

            var closeds = new[]
            {
                "B,B,^,^",
                "B,^",
                "C,C,^,^",
                "C,^"
            };

            foreach (var closed in closeds)
            {
                Assert.IsTrue(Array.Exists(actual.ClosedPatterns, pt => pt.PreorderString.Equals(closed)));
            }
        }
Ejemplo n.º 4
0
        public void Mine_FullBinaryTreeOfDepth3WithNoDuplicateSymbols()
        {
            var treeSet = new List <ITextTree>();

            const string t1 = "A,B,C,^,D,^,^,E,F,^,G,^,^,^";

            treeSet.Add(TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree("001 " + t1, Global.Seperator, Global.BackTrack));

            var miningParams = new MiningParams(SubtreeType.Induced,
                                                Ordered,
                                                Frequent,
                                                Closed,
                                                Maximal,
                                                SupportType.Hybrid,
                                                RootOccurrenceThreshold1,
                                                TransactionThreshold1,
                                                Global.Seperator,
                                                Global.BackTrack);

            var actual = CCTreeMinerV2.CCTreeMiner.Mine(treeSet, miningParams);

            var       numberFrequent = treeSet[0].InducedSubPatternUpperBound();
            const int numberClosed   = 1;
            const int numberMaximal  = 1;

            Assert.AreEqual(numberFrequent, actual.FrequentPatternsCount);
            Assert.AreEqual(numberClosed, actual.ClosedPatternsCount);
            Assert.AreEqual(numberMaximal, actual.MaximalPatternsCount);
            Assert.AreEqual(t1, actual.MaximalPatterns[0].PreorderString);
        }
Ejemplo n.º 5
0
        public void Mine_TheSameSymbol_DiscoverClosedAndMaximal_02()
        {
            var treeSet = new List <ITextTree>();

            const string t1 = "A,A,^,A,A,^,A,^,^,A,A,A,^,A,^,^,A,A,^,A,^,^,^,^";
            const string t2 = "A,A,^,A,A,^,A,^,^,A,A,A,^,A,^,^,A,A,^,A,^,^,^,^";

            treeSet.Add(TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree("001 " + t1, Global.Seperator, Global.BackTrack));
            treeSet.Add(TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree("002 " + t2, Global.Seperator, Global.BackTrack));

            var miningParams = new MiningParams(SubtreeType.Induced,
                                                Ordered,
                                                !Frequent,
                                                Closed,
                                                Maximal,
                                                SupportType.Hybrid,
                                                RootOccurrenceThreshold2,
                                                TransactionThreshold2,
                                                Global.Seperator,
                                                Global.BackTrack);

            var actual = CCTreeMinerV2.CCTreeMiner.Mine(treeSet, miningParams);

            const int numberClosed  = 4;
            const int numberMaximal = 1;

            Assert.AreEqual(numberClosed, actual.ClosedPatternsCount);
            Assert.AreEqual(numberMaximal, actual.MaximalPatternsCount);
            Assert.AreEqual(t1, actual.MaximalPatterns[0].PreorderString);
        }
Ejemplo n.º 6
0
        public void SubPatternUpperBoundTest_FullBinaryTreeOfDepth6WithNoDuplicationSymbols_210067308558SubPatterns()
        {
            const string fullBinaryTreeDepth5 = "Root,A,B,C,D,E,^,F,^,^,G,H,^,I,^,^,^,J,K,L,^,M,^,^,N,O,^,P,^,^,^,^,Q,R,S,T,^,U,^,^,V,W,^,X,^,^,^,Y,Z,a,^,b,^,^,c,d,^,e,^,^,^,^,^,A,B,C,D,E,^,F,^,^,G,H,^,I,^,^,^,J,K,L,^,M,^,^,N,O,^,P,^,^,^,^,Q,R,S,T,^,U,^,^,V,W,^,X,^,^,^,Y,Z,a,^,b,^,^,c,d,^,e,^,^,^,^,^,^";
            ITextTree    tree = TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree("001 " + fullBinaryTreeDepth5, Global.Seperator, Global.BackTrack);

            const ulong expected = 210067308558;
            var         actual   = tree.InducedSubPatternUpperBound();

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 7
0
        public void SubPatternUpperBoundTest_FullBinaryTreeOfDepth4WithNoDuplicationSymbols_750SubPatterns()
        {
            const string fullBinaryTreeDepth4 = "A,B,C,D,^,E,^,^,F,G,^,H,^,^,^,I,J,K,^,L,^,^,M,N,^,O,^,^,^,^";
            ITextTree    tree = TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree("001 " + fullBinaryTreeDepth4, Global.Seperator, Global.BackTrack);

            const ulong expected = 750;
            var         actual   = tree.InducedSubPatternUpperBound();

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 8
0
        public void SubPatternUpperBoundTest_BinaryTreeWithNoDuplicationSymbols_304SubPatterns()
        {
            const string t1   = "A,B,^,C,D,^,E,^,^,F,G,H,^,I,^,^,J,K,^,L,^,^,^,^";
            ITextTree    tree = TextTreeBuilder <TextTree, TreeNode> .ConvertToTextTree("001 " + t1, Global.Seperator, Global.BackTrack);

            const ulong expected = 304;
            var         actual   = tree.InducedSubPatternUpperBound();

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 9
0
        public void Mine_TheSameSymbol_DiscoverClosedAndMaximal_03()
        {
            var treeSet = new List <ITextTree>();

            var trees = new[]
            {
                "A,A,^,A,A,^,A,^,^,A,A,A,^,A,^,^,A,A,^,A,^,^,^,^",
                "A,A,^,A,A,^,A,^,^,A,A,A,^,A,^,^,A,A,^,A,^,^,^,^",
                "A,A,^,^"
            };

            for (var treeId = 1; treeId <= trees.Length; treeId++)
            {
                treeSet.Add(TextTreeBuilder <TextTree, TreeNode> .
                            ConvertToTextTree(string.Format("{0:000} {1}", treeId, trees[treeId - 1]), Global.Seperator, Global.BackTrack));
            }

            var miningParams = new MiningParams(SubtreeType.Induced,
                                                Ordered,
                                                !Frequent,
                                                Closed,
                                                Maximal,
                                                SupportType.Hybrid,
                                                RootOccurrenceThreshold2,
                                                TransactionThreshold2,
                                                Global.Seperator,
                                                Global.BackTrack);

            var actual = CCTreeMinerV2.CCTreeMiner.Mine(treeSet, miningParams);

            const int numberClosed  = 5;
            const int numberMaximal = 1;

            Assert.AreEqual(numberClosed, actual.ClosedPatternsCount);
            Assert.AreEqual(numberMaximal, actual.MaximalPatternsCount);
            Assert.AreEqual(trees[0], actual.MaximalPatterns[0].PreorderString);
        }