Esempio n. 1
0
        public T GetKnowledgeInstance <T>(IDocumentSetClass setClass, kFoldValidationCase validationCase, ILogBuilder logger) where T : class, IWebFVExtractorKnowledge, new()
        {
            T knowledge = GetKnowledgeInstance <T>("class_" + setClass.name, validationCase, WebFVExtractorKnowledgeType.aboutCategory, logger);

            knowledge.relatedItemPureName = setClass.name;
            return(knowledge);
        }
Esempio n. 2
0
        /// <summary>
        /// Performing post processing of FV knowledge
        /// </summary>
        /// <param name="validationCase">The validation case.</param>
        /// <param name="tools">The tools.</param>
        /// <param name="logger">The logger.</param>
        public override void DoFVPostProcessing(kFoldValidationCase validationCase, classifierTools tools, ILogBuilder logger)
        {
            List <lemmaSemanticCloud> clouds = new List <lemmaSemanticCloud>();

            foreach (var docClass in validationCase.context.classes.GetClasses())
            {
                var knowledge = validationCase.knowledgeLibrary.GetKnowledgeInstance <semanticFVExtractorKnowledge>(docClass, validationCase, logger);
                knowledge.semanticCloudFiltered = knowledge.semanticCloud.Clone();
                clouds.Add(knowledge.semanticCloudFiltered);
                knowledge.semanticCloud.className         = docClass.name;
                knowledge.semanticCloudFiltered.className = docClass.name + "flt";
                if (settings.semanticCloudFilter.isActive)
                {
                    knowledge.semanticCloudFiltered.description = "Semantic cloud filtered with cloud matrix";
                }
                else
                {
                    knowledge.semanticCloudFiltered.description = "Semantic cloud filter is off - this is initial cloud";
                }
            }
            if (settings.semanticCloudFilter.isActive)
            {
                logger.log(validationCase.name + ": Cloud matrix creation starts...");
                cloudMatrix matrix = new cloudMatrix(validationCase.name, "Cloud overlap matrix of [" + clouds.Count + "] for fold [" + validationCase.name + "] of experiment [" + validationCase.context.setup.name + "]");

                matrix.build(clouds, logger);

                matrix.TransformClouds(settings.semanticCloudFilter, logger);


                if (tools.operation.doMakeGraphForClassClouds)
                {
                    foreach (var cloud in clouds)
                    {
                        if (tools.operation.doUseSimpleGraphs)
                        {
                            cloud.GetSimpleGraph(true).Save(validationCase.caseFolder.pathFor("class_" + cloud.className + "_reducedCloud", getWritableFileMode.overwrite));
                        }
                        else
                        {
                            var converter = lemmaSemanticCloud.GetDGMLConverter();
                            converter.ConvertToDMGL(cloud).Save(validationCase.caseFolder.pathFor("class_" + cloud.className + "_reducedCloud", getWritableFileMode.overwrite));
                        }
                    }
                }


                //logger.log(validationCase.name + ": Cloud matrix report creation ...");
                // matrix.BuildTable(settings.semanticCloudFilter, cloudMatrixDataTableType.initialState | cloudMatrixDataTableType.overlapSize | cloudMatrixDataTableType.absoluteValues).GetReportAndSave(validationCase.folder, appManager.AppInfo, "matrix_overlap_norm_initial");
                // matrix.BuildTable(settings.semanticCloudFilter, cloudMatrixDataTableType.stateAfterReduction | cloudMatrixDataTableType.overlapSize | cloudMatrixDataTableType.absoluteValues).GetReportAndSave(validationCase.folder, appManager.AppInfo, "matrix_overlap_abs_initial");
                // matrix.BuildTable(settings.semanticCloudFilter, cloudMatrixDataTableType.stateAfterReduction | cloudMatrixDataTableType.overlapSize | cloudMatrixDataTableType.normalizedValues).GetReportAndSave(validationCase.folder, appManager.AppInfo, "matrix_overlap_norm_reduced");
                // matrix.BuildTable(settings.semanticCloudFilter, cloudMatrixDataTableType.stateAfterReduction | cloudMatrixDataTableType.overlapSize | cloudMatrixDataTableType.absoluteValues).GetReportAndSave(validationCase.folder, appManager.AppInfo, "matrix_overlap_abs_reduced");
                // matrix.BuildTable(settings.semanticCloudFilter, cloudMatrixDataTableType.stateAfterReduction | cloudMatrixDataTableType.maxCloudFrequency | cloudMatrixDataTableType.normalizedValues).GetReportAndSave(validationCase.folder, appManager.AppInfo, "matrix_CF_norm_reduced");
                // logger.log(validationCase.name + ": Cloud matrix report done.");
            }
            else
            {
                logger.log(validationCase.name + ": Cloud matrix is not active");
            }
        }
Esempio n. 3
0
        protected T CreateKnowledgeInstance <T>(String name, kFoldValidationCase validationCase, WebFVExtractorKnowledgeType type, ILogBuilder logger) where T : class, IWebFVExtractorKnowledge, new()
        {
            folderNode folder = validationCase.caseFolder;

            if (type == WebFVExtractorKnowledgeType.aboutDocumentSet)
            {
                folder = validationCollection.caseFolder;
                if (DoShareCaseKnowledge)
                {
                    folder = ExperimentSharedCasesFolder;
                }
            }


            T knowledge = new T();

            knowledge.name = name;
            knowledge.type = type;

            try
            {
                knowledge.Deploy(folder, logger);
            } catch (aceGeneralException ex)
            {
                validationCase.context.errorNotes.LogException("Create Knowledge Instance (" + typeof(T).Name + ") error for [" + name + "] in fold [" + validationCase.name + "]:" + ex.title, ex);
            }

            return(knowledge);
        }
Esempio n. 4
0
 public void SaveKnowledgeInstancesForClasses(kFoldValidationCase validationCase, ILogBuilder logger)
 {
     logger.log("Saving knowledge objects for [" + validationCase.name + "] classes");
     foreach (IWebFVExtractorKnowledge knowledge in registry[validationCase].Values)
     {
         knowledge.OnBeforeSave();
     }
     logger.log("Knowledge saved for [" + validationCase.name + "] classes");
 }
Esempio n. 5
0
        public void SaveCaseKnowledge <T>(DocumentSetCase setCase, kFoldValidationCase validationCase, ILogBuilder logger) where T : class, IWebFVExtractorKnowledge, new()
        {
            IWebFVExtractorKnowledge knowledge = GetKnowledgeInstance <T>(setCase, validationCase, logger);

            if (!savedKnowledge.Contains(knowledge))
            {
                lock (savedKnowledgeLock)
                {
                    if (!savedKnowledge.Contains(knowledge))
                    {
                        savedKnowledge.Add(knowledge);
                        knowledge.OnBeforeSave();
                    }
                }
            }
        }
        /// <summary>
        /// Deploys the specified v case coll.
        /// </summary>
        /// <param name="vCaseColl">The v case coll.</param>
        /// <param name="validationCase">The validation case.</param>
        /// <param name="subjects">The subjects.</param>
        /// <param name="classes">The classes.</param>
        public void deploy(validationCaseCollection vCaseColl, kFoldValidationCase _validationCase, IEnumerable <IPipelineTaskSubject> subjects, DocumentSetClasses classes)
        {
            lock (deployLock)
            {
                validation     = vCaseColl;
                validationCase = _validationCase;

                Thread.Sleep(100);

                var sites = subjects.ToSubjectTokenType <pipelineTaskMCSiteSubject>().ToList();
                // var sitesCopy = sites.ToList();

                sites = vCaseColl.FilterSites(sites);

                foreach (pipelineTaskMCSiteSubject site in sites)
                {
                    DocumentSetCase sCase = new DocumentSetCase();
                    sCase.subject = site;
                    sCase.data    = new WebClassifierResultSet(classes, validationCase.context, validationCase.extractor.settings);

                    Add(sCase);
                }
            }
        }
Esempio n. 7
0
 public override void DoFVPostProcessing(kFoldValidationCase validationCase, classifierTools tools, ILogBuilder logger)
 {
 }
Esempio n. 8
0
 public override tfidfFVExtractorKnowledge DoFVExtractionForClassViaCases(validationCaseCollection vCaseColl, IDocumentSetClass documentSetClass, kFoldValidationCase validationCase, classifierTools tools, ILogBuilder logger)
 {
     throw new NotImplementedException();
 }
Esempio n. 9
0
        /// <summary>
        /// Gets the knowledge instance.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="name">The name.</param>
        /// <param name="validationCase">The validation case.</param>
        /// <param name="type">The type.</param>
        /// <param name="logger">The logger.</param>
        /// <returns></returns>
        protected T GetKnowledgeInstance <T>(String name, kFoldValidationCase validationCase, WebFVExtractorKnowledgeType type, ILogBuilder logger) where T : class, IWebFVExtractorKnowledge, new()
        {
            IWebFVExtractorKnowledge knowledge = null;
            Boolean found = false;

            if (type == WebFVExtractorKnowledgeType.aboutCategory)
            {
                if (!registry[validationCase].TryGetValue(name, out knowledge))
                {
                    lock (createKnowledgeLock)
                    {
                        if (!registry[validationCase].ContainsKey(name))
                        {
                            statistics[name] = 0;
                            knowledge        = CreateKnowledgeInstance <T>(name, validationCase, type, logger);
                            registry[validationCase][name] = knowledge;
                        }
                        else
                        {
                            knowledge = registry[validationCase][name];
                        }
                    }
                }
                else
                {
                    found = true;
                }
            }
            else
            {
                if (!registryForCases.TryGetValue(name, out knowledge))
                {
                    lock (createCaseKnowledgeLock)
                    {
                        if (!registryForCases.ContainsKey(name))
                        {
                            statistics[name]       = 0;
                            knowledge              = CreateKnowledgeInstance <T>(name, validationCase, type, logger);
                            registryForCases[name] = knowledge;
                        }
                        else
                        {
                            knowledge = registryForCases[name];
                        }
                    }
                }
                else
                {
                    found = true;
                }
            }


            if (doKeepStatisticsOnAccess)
            {
                if (found)
                {
                    statistics[name]++;
                }
            }

            return(knowledge as T);
        }
Esempio n. 10
0
        ///// <summary>
        ///// Report on kFold case
        ///// </summary>
        ///// <returns></returns>
        //public Dictionary<IWebPostClassifier, DocumentSetCaseCollectionReport> GetCaseReport()
        //{
        //    Dictionary<IWebPostClassifier, DocumentSetCaseCollectionReport> reports = new Dictionary<IWebPostClassifier, DocumentSetCaseCollectionReport>();

        //    foreach (var classifier in validationCase.context.setup.classifiers)
        //    {

        //        DocumentSetCaseCollectionReport output = new DocumentSetCaseCollectionReport(validationCase.name + "_" + classifier.name + "_" + );

        //        output.kFoldCase = ;
        //        output.Classifier = classifier.name;

        //        classificationEvalMetricSet metrics = GetMetrics(classifier);

        //        foreach (KeyValuePair<int, DocumentSetCaseCollection> pair in this)
        //        {
        //            String className = pair.Value.validation.className;
        //            foreach (var setCase in pair.Value)
        //            {
        //                var assocClass = setCase.data[classifier].selected;

        //                if (assocClass != null)
        //                {

        //                    if (pair.Value.rightClassID == assocClass.classID)
        //                    {
        //                        output.Correct++;
        //                    }
        //                    else
        //                    {
        //                        output.Wrong++;
        //                    }

        //                }
        //                output.Targets++;
        //            }
        //        }


        //        output.Precision = metrics.GetPrecision();
        //        output.Recall = metrics.GetRecall();
        //        output.F1measure = metrics.GetF1();
        //        reports.Add(classifier, output);

        //    }

        //    return reports;

        //}


        public DocumentSetCaseCollectionSet(kFoldValidationCase _validationCase, DocumentSetClasses documentSetClasses)
        {
            classCollection = documentSetClasses;
            validationCase  = _validationCase;
        }
Esempio n. 11
0
        public override semanticFVExtractorKnowledge DoFVExtractionForClassViaCases(validationCaseCollection vCaseColl, IDocumentSetClass documentSetClass, kFoldValidationCase validationCase, classifierTools tools, ILogBuilder logger)
        {
            semanticFVExtractorKnowledge knowledge = vCaseColl.kFoldMaster.knowledgeLibrary.GetKnowledgeInstance <semanticFVExtractorKnowledge>(documentSetClass, vCaseColl.kFoldCase, logger);

            knowledge.SetRebuild(!tools.DoUseExistingKnowledge);


            if (knowledge.ShouldBuildAny())
            {
                DocumentSetCaseCollection dSetCol = new DocumentSetCaseCollection(documentSetClass);


                var context = tools.context.pipelineCollection.GetContext(tools, documentSetClass);

                //var sites = context.exitByType[typeof(pipelineTaskMCSiteSubject)].ConvertList<IPipelineTaskSubject, pipelineTaskMCSiteSubject>().ToList();
                var sites = context.exitByType[typeof(pipelineTaskMCSiteSubject)].ToList();
                List <pipelineTaskMCSiteSubject> ISites = sites.ConvertList <IPipelineTaskSubject, pipelineTaskMCSiteSubject>().ToList();

                List <pipelineTaskMCSiteSubject> fSites = vCaseColl.FilterSites(ISites);


                dSetCol.deploy(vCaseColl, validationCase, fSites, classes);

                List <webLemmaTermTable> tables = new List <webLemmaTermTable>();
                //List<webLemmaTermTable> chunkTables = new List<webLemmaTermTable>();



                foreach (DocumentSetCase vc in dSetCol)
                {
                    semanticFVExtractorKnowledge cKnowledge = vCaseColl.kFoldMaster.knowledgeLibrary.GetKnowledgeInstance <semanticFVExtractorKnowledge>(vc, validationCase, logger);
                    DoMakeKnowledgeForCase(vc, tools, dSetCol, logger);
                    tables.Add(cKnowledge.WLTableOfIndustryClass);
                }

                var tbl = tables.GetMergedLemmaTable(knowledge.name, logger);
                termTableConstructor.recompute(knowledge.WLTableOfIndustryClass, logger, false, tbl.GetList());



                DoMakeKnowledge(fSites, tools, knowledge, logger);
            }

            //  SetKnowledge(knowledge);
            //knowledge.OnBeforeSave();

            logger.log("[ALTPROC] Feature Extraction by [" + name + "][" + vCaseColl.kFoldCase.name + "][" + documentSetClass.name + "] done for " + vCaseColl.className);

            return(knowledge);
        }
Esempio n. 12
0
        public void AddNote(String note, kFoldValidationCase validationCase)
        {
            notes[validationCase.name].Add(note);
            log(validationCase.name + "> " + note);

        }
Esempio n. 13
0
 public List<String> GetNotes(kFoldValidationCase validationCase)
 {
     return notes[validationCase.name].ToList();
 }