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)); }
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); }
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); }
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))); } }
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; } }
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); }