/// <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); }
/// <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); }