Esempio n. 1
0
        /// <summary>
        /// Returns the shown (and maybe editted) extraction result
        /// </summary>
        public FieldExtractionResult GetFieldExtractionResult()
        {
            var retVal = new FieldExtractionResult();

            retVal.TemplateClassName = txtClassName.Text;
            retVal.TemplateGroupName = txtGroupName.Text;

            retVal.DataFields        = ucExtractedDataFields1.GetDataFieldExtractionResult();
            retVal.CalculationFields = ucExtractedCalculationFields1.GetCalculationFieldExtractionResult();
            retVal.ConditionalFields = ucExtractedConditionalFields1.GetConditionalFieldExtractionResult();

            return(retVal);
        }
Esempio n. 2
0
        /// <summary>
        /// Shows the content of the extraction result
        /// </summary>
        /// <param name="extractionResult">Extraction result of type FieldExtractionResult</param>
        public void ShowExtractedData(FieldExtractionResult extractionResult, DocumentClassTemplate classTemplate, DocumentGroupTemplate groupTemplate)
        {
            txtClassName.Text = extractionResult.TemplateClassName;
            txtGroupName.Text = extractionResult.TemplateGroupName;

            ucExtractedDataFields1.ShowExtractedDataFields(extractionResult.DataFields);
            ucExtractedCalculationFields1.ShowExtractedCalculationFields(extractionResult.CalculationFields);

            var conditionalFields = classTemplate.ConditionalFields;

            foreach (var item in groupTemplate.ConditionalFields)
            {
                if (item.OnlyStoreInGroupTemplate)
                {
                    conditionalFields.Add(item);
                }
            }

            ucExtractedConditionalFields1.ShowExtractedConditionalFields(extractionResult.ConditionalFields, conditionalFields);
        }
Esempio n. 3
0
        /// <summary>
        /// Extracts data from input text based on the given class template and matching group template.
        /// </summary>
        /// <param name="template">The class template to be used</param>
        /// <param name="groupTemplates">Available group templates. The correct group template for the given class template will be selected automatically. If it is the correct one, it's okay if only one group template is in the list.</param>
        /// <param name="inputText"></param>
        /// <param name="pdfFilePath"></param>
        /// <returns></returns>
        public async Task <FieldExtractionResult> ExtractData(DocumentClassTemplate template, List <DocumentGroupTemplate> groupTemplates, string inputText, string pdfFilePath)
        {
            var retVal = new FieldExtractionResult()
            {
                TemplateClassName = template.TemplateClassName, TemplateGroupName = template.TemplateGroupName
            };

            foreach (var item in template.DataFields)
            {
                var resultItem = new DataFieldResult()
                {
                    FieldType = item.FieldType, Name = item.Name
                };
                if (item.FieldMode == DataFieldMode.Regex)
                {
                    resultItem.Value = ExecuteRegexExpression(inputText, item.RegexExpressions);
                }
                retVal.DataFields.Add(resultItem);
            }

            var dataFieldsPosition = await TextLoader.GetTextFromPdfForPositionalDataFields(pdfFilePath, template.DataFields.Where(x => x.FieldMode == DataFieldMode.Position).ToList());

            foreach (var dataFieldPos in dataFieldsPosition)
            {
                var retValDataField = retVal.DataFields.Where(x => x.Name == dataFieldPos.Name).FirstOrDefault();
                if (retValDataField != null)
                {
                    retValDataField.Value = dataFieldPos.Value;
                }
            }


            //var groupTemplate = GetDocumentGroupTemplateByName(template.TemplateGroupName);
            var groupTemplate = groupTemplates.Where(x => x.TemplateGroupName == template.TemplateGroupName).FirstOrDefault();

            if (groupTemplate != null)
            {
                var fieldCalculator = new FieldCalculator();
                foreach (var item in groupTemplate.CalculationFields)
                {
                    retVal.CalculationFields.Add(fieldCalculator.CompareExpressionResults(item, retVal.DataFields));
                }
            }

            var conditionProcessor        = new ConditionalFieldProcessor();
            var allConditionalClassFields = template.ConditionalFields;


            // Add conditional fields to class template if necessary.
            if (groupTemplate != null)
            {
                var conditionalFieldsHash = allConditionalClassFields.Select(x => x.Name.ToLower()).ToHashSet();
                foreach (var item in groupTemplate.ConditionalFields.Where(x => x.OnlyStoreInGroupTemplate == false))
                {
                    var lowerName = item.Name.ToLower();
                    if (conditionalFieldsHash.Contains(lowerName) == false)
                    {
                        allConditionalClassFields.Add(item);
                    }
                }
                //allConditionalFields.AddRange(groupTemplate.ConditionalFields.Where(x => x.OnlyStoreInGroupTemplate));
            }

            foreach (var item in allConditionalClassFields)
            {
                var conditionalFieldResult = conditionProcessor.ProcessConditions(inputText, item);
                if (retVal.ConditionalFields.Where(x => x.Name == conditionalFieldResult.Name).Count() == 0)
                {
                    retVal.ConditionalFields.Add(conditionalFieldResult);
                }
            }

            if (groupTemplate != null)
            {
                foreach (var item in groupTemplate?.ConditionalFields.Where(x => x.OnlyStoreInGroupTemplate == true))
                {
                    var conditionalFieldResult = conditionProcessor.ProcessConditions(inputText, item);
                    if (retVal.ConditionalFields.Where(x => x.Name == conditionalFieldResult.Name).Count() == 0)
                    {
                        retVal.ConditionalFields.Add(conditionalFieldResult);
                    }
                }
            }

            return(retVal);
        }
Esempio n. 4
0
 /// <summary>
 /// Shows the extracted date within ucExtractedData and the used template within ucSingleTemplateEditor
 /// </summary>
 /// <param name="result">Extracted data</param>
 /// <param name="classTemplate">Used class template</param>
 public void ShowExtractedData(FieldExtractionResult result, DocumentClassTemplate classTemplate, DocumentGroupTemplate groupTemplate)
 {
     ucExtractedData1.ShowExtractedData(result, classTemplate, groupTemplate);
     ucSingleTemplateEditor1.ShowPropertiesAndDataFields(classTemplate);
     ucSingleTemplateEditor1.ActivateRegexAndPositionHelper();
 }