using ReportGenerator.Generator.Generator; using ReportGenerator.Models; namespace ReportGenerator; internal static class Program { internal static void Main(string[] args) { // Retrieve data Console.WriteLine("Getting data"); var tagFileInfos = GetTagFileInfos(args[0]); var scanFileInfos = GetScanFileInfos(args[1]); // Parse Console.WriteLine("Generating report"); var scans = Scan(tagFileInfos, scanFileInfos); new ReportGenerator("OCR Report", new HtmlDocumentGenerator(), scans) .AddComparison("Processing summary (Average)", v => v.Average()) // .AddComparison("Processing summary (Median)", v => v.Median()) .AddImageStatsFull("Scan Results") .ToFile("report"); Console.WriteLine("Completed"); } private static IEnumerable Scan( IEnumerable tagFileInfos, IEnumerable scanFileInfos ) { var scanFileLookup = scanFileInfos.ToLookup(i => i.ImageName); foreach (var i in tagFileInfos) { yield return new ImageStats( i.ImageName, i.GetWords().Distinct().OrderBy(w => w).ToArray(), scanFileLookup[i.ImageName] ); } } private static IEnumerable GetTagFileInfos(string dir) { if (!Directory.Exists(dir)) { throw new ArgumentException($"Invalid tagged data directory '{dir}'"); } return Directory.EnumerateFiles(dir, "*.json").Select(TagFileInfo.FromPath); } private static IEnumerable GetScanFileInfos(string dir) { if (!Directory.Exists(dir)) { throw new ArgumentException($"Invalid scan results directory '{dir}'"); } return Directory.EnumerateFiles(dir, "*.json").Select(ScanFileInfo.FromPath); } }