Free cookie consent management tool by TermsFeed Policy Generator

source: branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Analysis/SentenceLogger.cs @ 15821

Last change on this file since 15821 was 15821, checked in by lkammere, 6 years ago

#2886 Move code for visualization and logging of sentences to separate classes.

File size: 3.4 KB
Line 
1using System;
2using System.Diagnostics;
3using System.IO;
4using HeuristicLab.Common;
5using HeuristicLab.Core;
6
7namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration {
8  class SentenceLogger : Item, IGrammarEnumerationAnalyzer {
9    private readonly string distinctSentencesFileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\distinctSentences.csv";
10    private readonly string allSentencesFileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\allSentences.csv";
11    private readonly string columnDelimiter = ";";
12    private readonly string header = "infix;postfix;hash";
13
14    private TextWriterTraceListener distinctSentencesFileTrace;
15    private TextWriterTraceListener allSentencesFileTrace;
16
17    public SentenceLogger() { }
18
19    protected SentenceLogger(SentenceLogger original, Cloner cloner) { }
20
21    public override IDeepCloneable Clone(Cloner cloner) {
22      return new SentenceLogger(this, cloner);
23    }
24
25    public void Register(GrammarEnumerationAlgorithm algorithm) {
26      algorithm.Started += GrammarEnumerationAlgorithmOnStarted;
27      algorithm.Stopped += GrammarEnumerationAlgorithmOnStopped;
28      algorithm.ExceptionOccurred += GrammarEnumerationAlgorithmOnStopped;
29
30      algorithm.SentenceGenerated += SentenceGenerated;
31      algorithm.DistinctSentenceGenerated += DistinctSentenceGenerated;
32    }
33
34    public void Deregister(GrammarEnumerationAlgorithm algorithm) {
35      algorithm.Started -= GrammarEnumerationAlgorithmOnStarted;
36      algorithm.Stopped -= GrammarEnumerationAlgorithmOnStopped;
37      algorithm.ExceptionOccurred -= GrammarEnumerationAlgorithmOnStopped;
38
39      algorithm.SentenceGenerated -= SentenceGenerated;
40      algorithm.DistinctSentenceGenerated -= DistinctSentenceGenerated;
41    }
42
43    private void GrammarEnumerationAlgorithmOnStarted(object sender, EventArgs eventArgs) {
44      distinctSentencesFileTrace = new TextWriterTraceListener(new FileStream(distinctSentencesFileName, FileMode.Create));
45      allSentencesFileTrace = new TextWriterTraceListener(new FileStream(allSentencesFileName, FileMode.Create));
46      ((StreamWriter)distinctSentencesFileTrace.Writer).AutoFlush = true;
47      ((StreamWriter)allSentencesFileTrace.Writer).AutoFlush = true;
48
49      distinctSentencesFileTrace.WriteLine(header);
50      allSentencesFileTrace.WriteLine(header);
51    }
52
53    private void GrammarEnumerationAlgorithmOnStopped(object sender, EventArgs eventArgs) {
54      distinctSentencesFileTrace.Close();
55      allSentencesFileTrace.Close();
56    }
57
58    private void DistinctSentenceGenerated(object sender, PhraseAddedEventArgs phraseAddedEventArgs) {
59      distinctSentencesFileTrace.WriteLine(ToCsvLine(
60        ((GrammarEnumerationAlgorithm)sender).Grammar.ToInfixString(phraseAddedEventArgs.NewPhrase),
61        phraseAddedEventArgs.NewPhrase.ToString(),
62        phraseAddedEventArgs.NewHash.ToString()));
63    }
64
65    private void SentenceGenerated(object sender, PhraseAddedEventArgs phraseAddedEventArgs) {
66      allSentencesFileTrace.WriteLine(ToCsvLine(
67        ((GrammarEnumerationAlgorithm)sender).Grammar.ToInfixString(phraseAddedEventArgs.NewPhrase),
68        phraseAddedEventArgs.NewPhrase.ToString(),
69        phraseAddedEventArgs.NewHash.ToString()));
70    }
71
72    private string ToCsvLine(params string[] cols) {
73      return string.Join(columnDelimiter, cols);
74    }
75  }
76}
Note: See TracBrowser for help on using the repository browser.