/// <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> /// Actualiza un almacén de patrones. /// </summary> /// <param name="compareResult">Resultado de una comparación.</param> /// <param name="path">Ruta del store.</param> private static void Update(PdfCompareResult compareResult, string path) { // Si el archivo de patrones existe, lo actualizo con los nuevos // resultados (inserto nuevos, elimina sobrantes poco efectivos, y // actualizo matchCount. PdfTagPatternStore originalStore = GetStore(path); PdfTagPatternStore currentStore = GetStore(compareResult); List <PdfTagPattern> newPdfPatterns = new List <PdfTagPattern>(); foreach (var tagPattern in currentStore.PdfPatterns) { int indexOriginal = originalStore.PdfPatterns.IndexOf(tagPattern); if (indexOriginal == -1) { newPdfPatterns.Add(tagPattern); } else { originalStore.PdfPatterns[indexOriginal].MatchesCount++; } } int originalCount = originalStore.PdfPatterns.Count; int available = Settings.Current.MaxPatternCount - originalCount - newPdfPatterns.Count; if (available < 0) { for (int i = originalCount - 1; (i >= (originalCount + available)) && i >= 0; i--) { originalStore.PdfPatterns.RemoveAt(i); } } originalStore.PdfPatterns.AddRange(newPdfPatterns); originalStore.CompareCount++; originalStore.PdfPatterns.Sort(); XmlParser.SaveAsXml(originalStore, path); }
/// <summary> /// Obtiene un almacén de patrones a partir de unos /// resultados de comparación. /// </summary> /// <param name="compareResult">Resultados de comparación.</param> /// <returns>Almacén de patrones.</returns> private static PdfTagPatternStore GetStore(PdfCompareResult compareResult) { PdfTagPatternStore store = new PdfTagPatternStore { DocCategory = compareResult.DocCategory, DocID = compareResult.DocID, HierarchySetName = compareResult.HierarchySetName, MetadataName = compareResult.MetadataName, CompareCount = 1 }; foreach (var info in compareResult.WordGroupsInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "WordGroupsInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } } foreach (var info in compareResult.LinesInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "LinesInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } } foreach (var info in compareResult.PdfTextInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "PdfTextInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } } List <PdfTagPattern> usedPatterns = new List <PdfTagPattern>(); foreach (var info in compareResult.ColorFontWordGroupsInfos) { PdfTagPattern pattern = info.GetPdfTagPattern(); pattern.SourceTypeName = "ColorFontWordGroupsInfos"; if (store.PdfPatterns.IndexOf(pattern) == -1) { store.PdfPatterns.Add(pattern); } else { // Intentamos quitar los falsos positivos. if (!usedPatterns.Contains(pattern)) { usedPatterns.Add(pattern); } } } // Rutina de eliminación de patrones que tengan más de una aparición. (Quita los falsos positivos). foreach (PdfTagPattern usedPattern in usedPatterns) { store.PdfPatterns.Remove(usedPattern); } return(store); }
/// <summary> /// Crea un nuevo almacén de patrones. /// </summary> /// <param name="compareResult">Resultado de una comparación.</param> /// <param name="path">Ruta del store.</param> private static void Create(PdfCompareResult compareResult, string path) { PdfTagPatternStore store = GetStore(compareResult); XmlParser.SaveAsXml(store, path); }