static PatternTree ToPatternTree(string preString)
        {
            const char separator = ',';

            const bool notCare      = true;
            var        miningParams = new MiningParams(SubtreeType.Induced,
                                                       notCare,
                                                       notCare,
                                                       notCare,
                                                       notCare,
                                                       SupportType.Hybrid,
                                                       1,
                                                       1,
                                                       Global.Seperator,
                                                       Global.BackTrack);

            var segments = preString.Split(new[] { separator });

            var symbols = new NodeSymbol[segments.Length];

            for (var i = 0; i < segments.Length; i++)
            {
                symbols[i] = segments[i];
            }

            return(PatternTree.Create(symbols, notCare, miningParams));
        }
Esempio n. 2
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);
        }
Esempio n. 3
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);
        }
Esempio n. 4
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)));
            }
        }
Esempio 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);
        }
        private void DoWork()
        {
            if (isWorking)
            {
                throw new InvalidOperationException();
            }

            try
            {
                isWorking = true;
                param     = new MiningParams(
                    subtreeType: GetSubtreeType(),
                    mineOrdered: cbOrdered.Checked,
                    mineFrequent: cbMineFrequent.Checked,
                    mineClosed: cbMineClosed.Checked,
                    mineMaximal: cbMineMiximal.Checked,
                    supportType: GetSupportType(),
                    thresholdRoot: Convert.ToInt32(txtRootSupport.Text),
                    thresholdTransaction: Convert.ToInt32(txtTransactionSupport.Text),
                    separator: ',',
                    backTrackSymbol: "^");

                if (!param.MineOrdered)
                {
                    foreach (var tree in forest)
                    {
                        Canonicalizer.Canonicalize(tree);
                        PreorderIndexBuilder.BuildPreorderIndex(tree);
                    }
                    ShowForest();
                }

                var trees = forest.ToList();

                var rslt = CCTreeMiner.Mine(trees, param);

                ShowResults(rslt);
            }
            finally
            {
                isWorking = false;
            }
        }
Esempio n. 7
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);
        }