예제 #1
0
        /// <summary>
        /// Поиск частых поддеревьев в XML-деревьях
        /// </summary>
        /// <param name="nodeList">Список узлов деревьев</param>
        /// <param name="support">Поддержка</param>
        /// <param name="minNodeNumber">Минимальное число узлов</param>
        /// <param name="maxNodeNumber">Максимальное число узлов</param>
        /// <returns>Список частых поддеревьев</returns>
        public static SearchResult Mine(List <XMLNode> nodeList, double support, int minNodeNumber, int maxNodeNumber /*, long maxTimeSeconds*/)
        {
            List <string>           trees   = InitializeTreeEncodings(nodeList, TextTreeEncoding.Separator, TextTreeEncoding.UpSign);
            List <TextTreeEncoding> encList = new List <TextTreeEncoding>();

            foreach (string treeEncoding in trees)
            {
                TextTreeEncoding newTree = EncodingBuilder.ConvertToTextTreeEncoding(treeEncoding);
                if (newTree != null)
                {
                    Algorithm.Canonicalize(newTree);
                    DfsIndexBuilder.BuildDfsIndex(newTree);
                    encList.Add(newTree);
                }
            }
            SearchParameters searchParams = new SearchParameters(support, minNodeNumber, maxNodeNumber);

            SearchParameters.treeNumber = encList.Count;
            //SearchParameters.maxTime = maxTimeSeconds * 1000; //в миллисекундах
            SearchParameters.initialTrees = encList;
            SubtreeMiner treeMiner    = new SubtreeMiner(searchParams);
            SearchResult miningResult = treeMiner.Mine(encList);

            miningResult.SearchParams     = new SearchParameters(support, minNodeNumber, maxNodeNumber);
            miningResult.FrequentSubtrees = PruneSubtrees(miningResult.FrequentSubtrees, searchParams.MinimumNodeNumber, searchParams.MaximumNodeNumber);
            return(miningResult);
        }
예제 #2
0
 /// <summary>
 /// Dfs-индексация деревьев
 /// </summary>
 /// <param name="treeList">Список деревьев</param>
 private static void BuildDfsIndex(List <TextTreeEncoding> treeList)
 {
     foreach (TextTreeEncoding tree in treeList)
     {
         DfsIndexBuilder.BuildDfsIndex(tree);
     }
 }