/// <summary>
        /// Extrae el texto con los patrones aprendidos con tal de comparar si son falsos positivos.
        /// </summary>
        /// <param name="checkResult">PdfCheckResult para comparar los falsos positivos.</param>
        /// <returns></returns>
        public List <PdfTagPattern> ExtractToCheck(PdfCheckResult checkResult)
        {
            PdfTagExtractionResult result = new PdfTagExtractionResult()
            {
                Pdf          = checkResult.Pdf,
                MetadataType = Type.GetType(MetadataName)
            };

            _Converters = new Dictionary <Type, object>();

            IHierarchySet hierarchySet = GetHierarchySet();

            foreach (var page in checkResult.Pdf.PdfUnstructuredPages)
            {
                ExtractFromRectangles(page.WordGroups,
                                      result.MetadataType, hierarchySet, result, page.PdfPageN);

                ExtractFromRectangles(page.Lines,
                                      result.MetadataType, hierarchySet, result, page.PdfPageN, "LinesInfos");

                ExtractFromText(result.MetadataType, result, page, hierarchySet);

                ExtractFromColorFontText(page.ColorFontWordGroups,
                                         result.MetadataType, hierarchySet, result, page.PdfPageN);
            }

            result.Converters = _Converters;

            return(result.CheckWithRightMetadata(checkResult.InvoiceMetadata)); // Comprobamos que los patrones que pasemos como resultado hayan extraído el texto correctamente.
        }
        /// <summary>
        /// Devuelve el nombre de archivo incluyendo la ruta
        /// donde se almacenan los patrones para un documento
        /// determinado.
        /// </summary>
        /// <param name="checkResult">Resultado de comparación.</param>
        /// <returns>Ruta completa al archivo.</returns>
        public static string GetPath(PdfCheckResult checkResult)
        {
            /*return $"{GetDirectory(compareResult.DocCategory)}"+
             *   $"{GetFileName(compareResult.DocID)}";*/

            return($"C:\\ProgramData\\PdfTagger\\Patterns\\InvoicePdfTaggerOriginalModif\\" +
                   $"{GetFileName(checkResult.DocID)}");
        }
        /// <summary>
        /// Actualiza los patrones acumulando el número de falsos positivos encontrados para cada uno.
        /// </summary>
        /// <param name="checkResult">Objeto que contiene los patrones con falsos positivos.</param>
        /// <param name="path">Ruta del fichero XML donde para almacenar los patrones.</param>
        private static void UpdateCheck(PdfCheckResult checkResult, string path)
        {
            PdfTagPatternStore store = GetStore(path);

            List <PdfTagPattern> newPdfPatterns = new List <PdfTagPattern>();

            foreach (var tagPattern in checkResult.ErrorPatterns)
            {
                int indexOriginal = store.PdfPatterns.IndexOf(tagPattern);

                store.PdfPatterns[indexOriginal].ErrorsCount++;
            }

            store.PdfPatterns.Sort();
            XmlParser.SaveAsXml(store, path);
        }
Example #4
0
        /// <summary>
        /// Intenta la extracción de datos mediante patrones aprendidos.
        /// Realiza una comparación entre metadata ya revisado y el texto extraído por los patrones.
        /// </summary>
        public void ExtractWithCheck(IMetadata metadata)
        {
            try
            {
                Store = PdfTagPatternFactory.GetStore(Pdf);
            }
            catch
            {
            }

            CheckResult = new PdfCheckResult(Pdf, metadata);

            if (Store != null)
            {
                Console.WriteLine("Extrayendo");
                CheckResult.ErrorPatterns = Store.ExtractToCheck(CheckResult);

                Console.WriteLine("Guardando");
                PdfTagPatternFactory.SaveCheck(CheckResult);
            }
        }
        /// <summary>
        /// Actualiza el número de errores de los patrones.
        /// </summary>
        /// <param name="checkResult">Resuktado de una comprobación.</param>
        public static void SaveCheck(PdfCheckResult checkResult)
        {
            string file = GetPath(checkResult);

            UpdateCheck(checkResult, file);
        }