예제 #1
0
        private void CreateTokenMatchGraph(OSPCResult r)
        {
            GraphPane g = new GraphPane(GraphRect, "Distribution of token / match", "-", "Token / match");
            SetupGraph(g);

            var lst = r.Results.Select(i => (double)i.TokenCount / (double)i.MatchCount).OrderBy(i => i).ToArray();

            var c = g.AddCurve("Token / match",
                Enumerable.Range(1, lst.Length).Select(i => (double)i).ToArray(),
                lst,
                Color.Red);
            c.Symbol.IsVisible = false;

#if SHOW_DERIVATION_2
            var derv_2 = lst.CalcDerv2();
            c = g.AddCurve("Derivation 2",
                Enumerable.Range(1, derv_2.Length).Select(i => (double)i).ToArray(),
                derv_2.ToArray(),
                Color.Green);
            c.IsY2Axis = true;
            c.Symbol.IsVisible = false;
#endif

            AddLine(g, r.AVG_TokenPerMatch, Color.Blue, "Avg");
            AddLine(g, r.POI_TokenPerMatch, Color.Green, "POI");

            g.AxisChange();
            using (var img = g.GetImage())
            {
                img.Save(Path.Combine(OutPath, "TokenMatchGraph.png"), ImageFormat.Png);
            }
        }
예제 #2
0
        public void Create(Configuration cfg, OSPCResult r)
        {
            _cfg = cfg;

            if (!Directory.Exists(OutPath))
            {
                Directory.CreateDirectory(OutPath);
            }

            if(!Directory.Exists(Path.Combine(OutPath, "Matches")))
            {
                Directory.CreateDirectory(Path.Combine(OutPath, "Matches"));
            }

            CreateSummaryPage(r);
            CreateDetailPages(r);
            CreateFriendFinderPage(r);

            CreateTokenGraph(r);
            CreateTokenDetailGraph(r);
            CreatePercentGraph(r);
            CreateTokenMatchGraph(r);

            WriteStylesheet();
        }
예제 #3
0
        public void Create(Configuration cfg, OSPCResult r)
        {
            _cfg = cfg;

            if (!Directory.Exists(OutPath))
            {
                Directory.CreateDirectory(OutPath);
            }

            if(!Directory.Exists(Path.Combine(OutPath, "Matches")))
            {
                Directory.CreateDirectory(Path.Combine(OutPath, "Matches"));
            }

            CreateSummaryPage(r);
            CreateDetailPages(r);
            CreateFriendFinderPage(r);

            CreateTokenGraph(r);
            CreateTokenDetailGraph(r);
            CreatePercentGraph(r);
            CreateTokenMatchGraph(r);

            WriteStylesheet();
        }
예제 #4
0
        private void CreatePercentGraph(OSPCResult r)
        {
            GraphPane g = new GraphPane(GraphRect, "Distribution of % similarity", "-", "% similarity");
            SetupGraph(g);

            var lst = r.Results.SelectMany(i => new[] { 100.0 * i.SimilarityA, 100.0 * i.SimilarityB }).OrderBy(i => i).ToArray();

            var c = g.AddCurve("Similarity",
                Enumerable.Range(1, lst.Length).Select(i => (double)i).ToArray(),
                lst,
                Color.Red);
            c.Symbol.IsVisible = false;

#if SHOW_DERIVATION_2
            var derv_2 = lst.CalcDerv2();
            c = g.AddCurve("Derivation 2",
                Enumerable.Range(1, derv_2.Length).Select(i => (double)i).ToArray(),
                derv_2.ToArray(),
                Color.Green);
            c.IsY2Axis = true;
            c.Symbol.IsVisible = false;
#endif

            AddLine(g, 100.0 * r.AVG_Similarity, Color.Blue, "Avg");
            AddLine(g, 100.0 * r.POI_Similarity, Color.Green, "POI");

            g.AxisChange();
            using (var img = g.GetImage(512, 256, 72.0f))
            {
                img.Save(Path.Combine(OutPath, "PercentGraph.png"), ImageFormat.Png);
            }
        }
예제 #5
0
 public void Create(Configuration cfg, OSPCResult r)
 {
     Console.WriteLine("Resultset: {0}", r.Results.Count);
     if (r.Results.Count > 0)
     {
         Console.WriteLine("Max Matches: {0}", r.Results.Max(m => m.MatchCount));
         Console.WriteLine("Max Tokens: {0}", r.Results.Max(m => m.TokenCount));
     }
 }
예제 #6
0
 public void Create(Configuration cfg, OSPCResult r)
 {
     Console.WriteLine("Resultset: {0}", r.Results.Count);
     if (r.Results.Count > 0)
     {
         Console.WriteLine("Max Matches: {0}", r.Results.Max(m => m.MatchCount));
         Console.WriteLine("Max Tokens: {0}", r.Results.Max(m => m.TokenCount));
     }
 }
예제 #7
0
        public void Create(Configuration cfg, OSPCResult r)
        {
            Console.WriteLine("{0, -20} {1,8} {2, -20} {3,8} {4, 8} {5, 8}", "A", "% A", "B", "% B", "Matches", "Tokens");

            foreach (var result in r.Results.Take(100))
            {
                Console.WriteLine("{0, -20} {1,8:n2} {2, -20} {3,8:n2} {4, 8} {4, 8}",
                    result.A.FilePath.MaxLength(17, "...", true),
                    100.0 * result.SimilarityA,
                    result.B.FilePath.MaxLength(17, "...", true),
                    100.0 * result.SimilarityB,
                    result.MatchCount,
                    result.TokenCount);
            }
        }
예제 #8
0
        public void Create(Configuration cfg, OSPCResult r)
        {
            Console.WriteLine("{0, -20} {1,8} {2, -20} {3,8} {4, 8} {5, 8}", "A", "% A", "B", "% B", "Matches", "Tokens");

            foreach (var result in r.Results.Take(100))
            {
                Console.WriteLine("{0, -20} {1,8:n2} {2, -20} {3,8:n2} {4, 8} {4, 8}",
                                  result.A.FilePath.MaxLength(17, "...", true),
                                  100.0 * result.SimilarityA,
                                  result.B.FilePath.MaxLength(17, "...", true),
                                  100.0 * result.SimilarityB,
                                  result.MatchCount,
                                  result.TokenCount);
            }
        }
예제 #9
0
        private void CreateFriendFinderPage(OSPCResult r)
        {
            using (var html = new StreamWriter(Path.Combine(OutPath, "friendfinder.html")))
            {
                WriteHeader(html, "OSPC - FriendFinder", "", new TupleList<string, string>() { { "index.html", "Results" } });
                WriteFriendFinderTitle(html);

                foreach (var f in r.Friends)
                {
                    WriteFriendFinderLine(html, f);
                }

                WriteFriendFinderFooter(html);
                WriteFooter(html);
                html.Flush();
            }
        }
예제 #10
0
        private void CreateSummaryPage(OSPCResult r)
        {
            using (var html = new StreamWriter(Path.Combine(OutPath, "index.html")))
            {
                WriteHeader(html, "OSPC", "", new TupleList<string, string>() { { "friendfinder.html", "Friend Finder" } });
                WriteSummaryTitle(html);

                foreach (var result in r.Results.Where(i => i.SimilarityA >= _cfg.MIN_SIMILARITY || i.SimilarityB >= _cfg.MIN_SIMILARITY))
                {
                    WriteSummaryResultLine(html, result, GetDetailFileName(result));
                }

                WriteSummaryFooter(html);
                WriteFooter(html);
                html.Flush();
            }
        }
예제 #11
0
 public void Create(Configuration cfg, OSPCResult r)
 {
     foreach (var result in r.Results.Take(10))
     {
         Console.WriteLine(result.A.FilePath);
         Console.WriteLine(result.B.FilePath);
         Console.WriteLine("----------------------------");
         Console.WriteLine("Matches: {0}", result.MatchCount);
         Console.WriteLine("Tokens: {0}", result.TokenCount);
         Console.WriteLine("% A: {0:n2}", 100.0 * result.SimilarityA);
         Console.WriteLine("% B: {0:n2}", 100.0 * result.SimilarityB);
         foreach (var m in result.Matches)
         {
             Console.WriteLine("  !: " + m.ToString());
         }
         Console.WriteLine();
     }
 }
예제 #12
0
 public void Create(Configuration cfg, OSPCResult r)
 {
     foreach (var result in r.Results.Take(10))
     {
         Console.WriteLine(result.A.FilePath);
         Console.WriteLine(result.B.FilePath);
         Console.WriteLine("----------------------------");
         Console.WriteLine("Matches: {0}", result.MatchCount);
         Console.WriteLine("Tokens: {0}", result.TokenCount);
         Console.WriteLine("% A: {0:n2}", 100.0 * result.SimilarityA);
         Console.WriteLine("% B: {0:n2}", 100.0 * result.SimilarityB);
         foreach (var m in result.Matches)
         {
             Console.WriteLine("  !: " + m.ToString());
         }
         Console.WriteLine();
     }
 }
예제 #13
0
        public void Create(Configuration cfg, OSPCResult r)
        {
            Console.WriteLine("{");
            Console.WriteLine("    \"results\": [");
            var resultCount = 0;

            foreach (var result in r.Results)
            {
                var aReader  = new StreamReader(result.A.FilePath);
                var bReader  = new StreamReader(result.B.FilePath);
                var matchesA = GetMatchedStrings(result, aReader, m => m.TokensA);
                var matchesB = GetMatchedStrings(result, bReader, m => m.TokensB);



                Console.WriteLine("        {");
                Console.WriteLine("            \"{0}\": \"{1}\",", "fileA", result.A.FilePath.Replace('\\', '/'));
                Console.WriteLine("            \"{0}\": \"{1}\",", "fileB", result.B.FilePath.Replace('\\', '/'));
                Console.WriteLine("            \"{0}\": {1},", "matchCount", result.MatchCount);
                Console.WriteLine("            \"{0}\": {1},", "tokenCount", result.TokenCount);
                Console.WriteLine("            \"{0}\": {1:n2},", "simmA", 100.0 * result.SimilarityA);
                Console.WriteLine("            \"{0}\": {1:n2},", "simmB", 100.0 * result.SimilarityB);
                Console.WriteLine("            \"{0}\": [{1}],", "matchesA", BuildArrayJson(matchesA));
                Console.WriteLine("            \"{0}\": [{1}]", "matchesB", BuildArrayJson(matchesB));
                if (resultCount == r.Results.Count - 1)
                {
                    Console.WriteLine("        }");
                }
                else
                {
                    Console.WriteLine("        },");
                }


                /* BuildArrayJson(matchesA),
                 *  "matchesB",
                 *  BuildArrayJson(matchesB)*/
                resultCount++;
            }
            Console.WriteLine("    ]");
            Console.WriteLine("}");
        }
예제 #14
0
        public async void Check()
        {
            if (!CanCheck())
            {
                return;
            }

            IsRunning = true;
            try
            {
                await Task.Run(() =>
                {
                    var watch    = Stopwatch.StartNew();
                    var comparer = new Comparer(Configuration, (IProgressReporter)this);

                    AddMessage(string.Format("Comparing {0} files ", Submissions.Count));
                    var compareResult = comparer.Compare(Submissions.Select(i => i.Submission).ToArray());
                    AddMessage(string.Format("  finished; time: {0:n2} sec.", watch.Elapsed.TotalSeconds));

                    AddMessage("Creating statistics");
                    var result  = OSPCResult.Create(compareResult);
                    var friends = new OSPC.FriendFinder(Configuration);
                    friends.Find(result, compareResult);
                    AddMessage(string.Format("  finished; time: {0:n2} sec.", watch.Elapsed.TotalSeconds));

                    AddMessage("Creating reports");
                    var html = new OSPC.Reporter.Html.HtmlReporter(HtmlReportPath, (IProgressReporter)this);
                    html.Create(this.Configuration, result);
                    System.Diagnostics.Process.Start(System.IO.Path.Combine(html.OutPath, "index.html"));
                    AddMessage(string.Format("  finished in total {0:n2} sec.", watch.Elapsed.TotalSeconds));

                    SaveUserSettings();
                });
            }
            finally
            {
                IsRunning = false;
            }
        }
예제 #15
0
        private void CreateDetailPages(OSPCResult r)
        {
            int counter = 0;
            int max = r.Results.Count;
            _progress.Start();

            object _lock = new object();
#if SINGLE_THREADED
            foreach(var result in r.Results)
#else
            Parallel.ForEach(r.Results.Where(i => i.SimilarityA >= _cfg.MIN_SIMILARITY || i.SimilarityB >= _cfg.MIN_SIMILARITY), result =>
#endif
            {
                WriteDetail(result, GetDetailFileName(result));
                lock (_lock)
                {
                    _progress.Progress((double)++counter / (double)max);
                }
            }
#if !SINGLE_THREADED
            );
#endif
            _progress.End();
        }
예제 #16
0
        private void CreateTokenMatchGraph(OSPCResult r)
        {
            GraphPane g = new GraphPane(GraphRect, "Distribution of token / match", "-", "Token / match");
            SetupGraph(g);

            var lst = r.Results.Select(i => (double)i.TokenCount / (double)i.MatchCount).OrderBy(i => i).ToArray();

            var c = g.AddCurve("Token / match",
                Enumerable.Range(1, lst.Length).Select(i => (double)i).ToArray(),
                lst,
                Color.Red);
            c.Symbol.IsVisible = false;

            #if SHOW_DERIVATION_2
            var derv_2 = lst.CalcDerv2();
            c = g.AddCurve("Derivation 2",
                Enumerable.Range(1, derv_2.Length).Select(i => (double)i).ToArray(),
                derv_2.ToArray(),
                Color.Green);
            c.IsY2Axis = true;
            c.Symbol.IsVisible = false;
            #endif

            AddLine(g, r.AVG_TokenPerMatch, Color.Blue, "Avg");
            AddLine(g, r.POI_TokenPerMatch, Color.Green, "POI");

            g.AxisChange();
            using (var img = g.GetImage())
            {
                img.Save(Path.Combine(OutPath, "TokenMatchGraph.png"), ImageFormat.Png);
            }
        }
예제 #17
0
        private void CreateSummaryPage(OSPCResult r)
        {
            using (var html = new StreamWriter(Path.Combine(OutPath, "index.html")))
            {
                WriteHeader(html, "OSPC", "", new TupleList<string, string>() { { "friendfinder.html", "Friend Finder" } });
                WriteSummaryTitle(html);

                foreach (var result in r.Results.Where(i => i.SimilarityA >= _cfg.MIN_SIMILARITY || i.SimilarityB >= _cfg.MIN_SIMILARITY))
                {
                    WriteSummaryResultLine(html, result, GetDetailFileName(result));
                }

                WriteSummaryFooter(html);
                WriteFooter(html);
                html.Flush();
            }
        }
예제 #18
0
        private void CreatePercentGraph(OSPCResult r)
        {
            GraphPane g = new GraphPane(GraphRect, "Distribution of % similarity", "-", "% similarity");
            SetupGraph(g);

            var lst = r.Results.SelectMany(i => new[] { 100.0 * i.SimilarityA, 100.0 * i.SimilarityB }).OrderBy(i => i).ToArray();

            var c = g.AddCurve("Similarity",
                Enumerable.Range(1, lst.Length).Select(i => (double)i).ToArray(),
                lst,
                Color.Red);
            c.Symbol.IsVisible = false;

            #if SHOW_DERIVATION_2
            var derv_2 = lst.CalcDerv2();
            c = g.AddCurve("Derivation 2",
                Enumerable.Range(1, derv_2.Length).Select(i => (double)i).ToArray(),
                derv_2.ToArray(),
                Color.Green);
            c.IsY2Axis = true;
            c.Symbol.IsVisible = false;
            #endif

            AddLine(g, 100.0 * r.AVG_Similarity, Color.Blue, "Avg");
            AddLine(g, 100.0 * r.POI_Similarity, Color.Green, "POI");

            g.AxisChange();
            using (var img = g.GetImage(512, 256, 72.0f))
            {
                img.Save(Path.Combine(OutPath, "PercentGraph.png"), ImageFormat.Png);
            }
        }
예제 #19
0
        private void CreateFriendFinderPage(OSPCResult r)
        {
            using (var html = new StreamWriter(Path.Combine(OutPath, "friendfinder.html")))
            {
                WriteHeader(html, "OSPC - FriendFinder", "", new TupleList<string, string>() { { "index.html", "Results" } });
                WriteFriendFinderTitle(html);

                foreach (var f in r.Friends)
                {
                    WriteFriendFinderLine(html, f);
                }

                WriteFriendFinderFooter(html);
                WriteFooter(html);
                html.Flush();
            }
        }
예제 #20
0
        private void CreateDetailPages(OSPCResult r)
        {
            int counter = 0;
            int max = r.Results.Count;
            _progress.Start();

            object _lock = new object();
            #if SINGLE_THREADED
            foreach(var result in r.Results)
            #else
            Parallel.ForEach(r.Results.Where(i => i.SimilarityA >= _cfg.MIN_SIMILARITY || i.SimilarityB >= _cfg.MIN_SIMILARITY), result =>
            #endif
            {
                WriteDetail(result, GetDetailFileName(result));
                lock (_lock)
                {
                    _progress.Progress((double)++counter / (double)max);
                }
            }
            #if !SINGLE_THREADED
            );
            #endif
            _progress.End();
        }