Пример #1
0
        private void ProcessChildItems(List <ReportResultItem> items, string groupKey, int level, bool visibility)
        {
            if (items == null)
            {
                return;
            }

            for (int i = 0; i < items.Count; i++)
            {
                string           newGroupKey = String.Format(CultureInfo.InvariantCulture, "{0}{1}_", groupKey, i);
                ReportResultItem item        = items[i];
                bool             hasChildren = (item.ChildItems != null && item.ChildItems.Count > 0);
                TableRow         row         = new TableRow();
                {
                    TableCell cell1  = new TableCell();
                    string    imgUrl = ResolveClientUrl(hasChildren ? "~/layouts/images/plus.gif" : "~/layouts/images/dot.gif");
                    cell1.Text = String.Format(
                        CultureInfo.InvariantCulture,
                        "<span style='padding-left:{0}px;'><img src='{1}' border='0' width='9px' height='9px' /> {2}</span>",
                        level * 20,
                        imgUrl,
                        item.Name);
                    row.Cells.Add(cell1);

                    TableCell cell2 = new TableCell();
                    cell2.Text            = item.Total.ToString("f");
                    cell2.HorizontalAlign = HorizontalAlign.Right;
                    cell2.Width           = Unit.Pixel(100);
                    row.Cells.Add(cell2);
                }
                row.Style.Add(HtmlTextWriterStyle.Display, visibility ? "" : "none");
                row.Attributes.Add("key", groupKey);
                if (hasChildren)
                {
                    row.Style.Add(HtmlTextWriterStyle.Cursor, "hand");
                    row.Attributes.Add("onclick",
                                       String.Format(CultureInfo.InvariantCulture, "collapse_expand(this, '{0}');", newGroupKey));
                }
                MainTable.Rows.Add(row);

                ProcessChildItems(item.ChildItems, newGroupKey, level + 1, false);
            }
        }
Пример #2
0
        private void Level1Classification(List <DocumentData> TrainData, List <DocumentData> TestData)
        {
            var selectedFeatures = AppDataCenter.Singleton.FeaturesSelected.Select((a, i) => new { item = a, index = i })
                                   .Where(a => a.item.IsSelected).Select(a => a.index).ToArray();

            //  selectedFeatures = new int[] {  37 };



            ClassifierService.Service.InitSelectFeatures(selectedFeatures);



            ScalingFactors scales = null;

            //  if(AppDataCenter.Singleton.PathToScale != null)
            // {
            //      scales = FeatureListHolder.loadScalesFromFile(ClassifierService.Service.LocalFeatures, AppDataCenter.Singleton.PathToScale);


            // }
            // AppDataCenter.Singleton.AddConsoleMessage("Building Model");
            AppDataCenter.Singleton.ChosenFeatures = ClassifierService.Service.LocalFeatures;
            AppDataCenter.Singleton.UpdateFeatureVertHorzSelection();
            AppDataCenter.Singleton.EntireModelStats = ClassifierService.Service.CreateModel(AppDataCenter.Singleton.ChosenFields
                                                                                             , TrainData, TestData, Configuration, m_featuresCalculate, AppDataCenter.Singleton.AddConsoleMessage, TuneScale, AppDataCenter.Singleton.PathToScale);


            //  if (AppDataCenter.Singleton.PathToScale != null)
            // {


            //  FeatureListHolder.SaveScalesToFile(ClassifierService.Service.LocalFeatures, AppDataCenter.Singleton.PathToScale,scales);
            // }


            double[] confidenceOut;

            List <ReportResultItem> ReoprtResults = new List <ReportResultItem>();

            Array.ForEach(AppDataCenter.Singleton.ChosenFields,
                          new Action <string>(a =>
            {
                ReoprtResults.Add(new ReportResultItem(a));
            }));
            ReportResultItem NullResult = new ReportResultItem("");

            ReoprtResults.Add(NullResult);

            AppDataCenter.Singleton.RejectedFields.Clear();

            ClassifierService.Service.level1RunTestForLevel2(TrainData, AppDataCenter.Singleton.ChosenFields, AppDataCenter.Singleton.AddConsoleMessage);


            // add printing of train data sucss

            ConcurrentBag <FieldReportItem> fieldBag = new ConcurrentBag <FieldReportItem>();


            AppDataCenter.Singleton.AddConsoleMessage("Running Test on  : " + TestData.Count + " Pages");
            int index = 0;

            // int result;
            foreach (DocumentData doc1 in TestData)
            {
                var startTimeFeatures = DateTime.Now;

                //     AppDataCenter.Singleton.AddConsoleMessage("Testing Page : " + docnum++);

                //  List<FieldData> fields = ClassifierService.Service.GetFieldsOfDoc(FieldsToTest, doc1);
                TimeSpan FeatureCalcSpan = new TimeSpan(0);

                /* foreach (CandidateData field in doc1.Candidates)
                 * {
                 *   result = 0;
                 *   startTimeFeatures = DateTime.Now;
                 *   if (m_useLastRuntimeData == true)
                 *   {
                 *       foreach (var featureIndex in ClassifierService.Service.LocalFeatures
                 *                                       .Select((x, i) => AppDataCenter.Singleton.IsFeatureCalculate(x.Name) == true ? i : -1)
                 *                                       .Where(x => x >= 0))
                 *       {
                 *           field.Features[featureIndex] = ClassifierService.Service.GetFieldFeature(doc1, field, featureIndex);
                 *       }
                 *   }
                 *   else
                 *   {
                 *       field.Features = ClassifierService.Service.GetFieldFeatures(doc1, field);
                 *   }
                 *   FeatureCalcSpan += (DateTime.Now - startTimeFeatures);
                 *   result = ClassifierService.Service.GetDescition(field.Features, out confidenceOut);
                 *
                 *
                 * //  field.AccordConfidance = (ClassifierService.Service.NormalizaedConfidence(confidenceOut));
                 *   field.AccordConfidance = (confidenceOut);
                 * }*/
                List <int> featursIndexFilter = new List <int>();
                // Get the index of the feature we need to calculate - all other features will be use the value already exist in the field

                ClassifierService.Service.getDocFeatures(doc1, null, null, AppDataCenter.Singleton.ChosenFields, featursIndexFilter, false, null, true, true);

                double NumGolden  = 0;
                double NumMatched = 0;

                foreach (var r in AppDataCenter.Singleton.ChosenFields.Select((x, i) => new { Value = x, Index = i }))
                {
                    //  if (doc1.Candidates.Where(a => a.NameFromTypist == r.Value).ToList().Count() <= 0) continue;
                    NumGolden++;

                    CandidateData fieldCandidate = doc1.Candidates.OrderByDescending(a => a.AccordConfidance[r.Index]).FirstOrDefault();

                    FieldReportItem fieldReportItem = new FieldReportItem(r.Value, r.Index, fieldCandidate, doc1);


                    if (fieldReportItem.IsMatch)
                    {
                        NumMatched++;
                    }

                    /*  }
                     * else
                     * {
                     *    fieldReportItem.isRejected = true;
                     *
                     * }*/
                    if (!fieldReportItem.IsMatch)
                    {
                        Trace.WriteLine("Doc : " + doc1.DocumentName + " ,Confidance : " + fieldCandidate.AccordConfidance[r.Index] + ",Field : " + r.Value + " ,Recognized : " + fieldCandidate.NameFromTypist + " content : " + fieldCandidate.Content + (fieldReportItem.IsMatch ? " True" : " False"));
                    }



                    fieldBag.Add(fieldReportItem);
                }

                AppDataCenter.Singleton.AddConsoleMessage(index++ + " Page : " + doc1.DocumentName + " Getting Features (sec) : " + FeatureCalcSpan.TotalSeconds + " success : " + Math.Round(NumMatched / NumGolden * 100) + "%");
            }



            AppDataCenter.Singleton.AddConsoleMessage("Update results");


            AppDataCenter.Singleton.EntireModelStats.testresults = fieldBag.ToList();


            ReportData.noOfFields  = fieldBag.Count();
            ReportData.NoOfPages   = TestData.Count;
            ReportData.fpCount     = fieldBag.Where(a => a.IsFP).Count();
            ReportData.matchCount  = fieldBag.Where(a => a.IsMatch).Count();
            ReportData.rejectCount = fieldBag.Where(a => a.IsRejected).Count();

            foreach (FieldReportItem fieldresult in fieldBag.Where(a => a.IsMatch))
            {
                ReportData.QualityMatch.Add(fieldresult.MatchQuality);
            }

            List <FieldReportItem> FPList = fieldBag.Where(a => a.IsFP).ToList().OrderBy(b => b.Field.NameFromTypist ?? "").ThenByDescending(a => a.Field.AccordConfidance.Max()).ToList();


            foreach (var r in AppDataCenter.Singleton.ChosenFields)
            {
                List <FieldReportItem> FPfromGolden    = FPList.Where(a => a.ExpectedField.NameFromTypist == r).ToList();
                List <FieldReportItem> FPnotFromGolden = FPList.Where(a => a.ExpectedField.NameFromTypist != r && a.MatchedName == r).ToList();
                double success  = (double)fieldBag.Where(a => a.Field.NameFromTypist == r && a.IsMatch).Count() / (double)fieldBag.Where(a => a.Field.NameFromTypist == r).Count() * 100;
                int    countNum = fieldBag.Where(a => a.Field.NameFromTypist == r).Count();
                Trace.WriteLine("*********** The field : " + r + " success : " + Math.Round(success, 1) + "%   Count : " + countNum + "         *************");
            }
            AppDataCenter.Singleton.NotifyChange(NotifyGroup.ScatterData);
        }