18 using RPlugin.Exceptions;
20 using System.Collections.Generic;
23 using System.Reflection;
25 using TraceLab.Components.RPlugin.Properties;
26 using TraceLab.Components.Types.Tracers.InformationRetrieval;
27 using TraceLabSDK.Types;
29 namespace TraceLab.Components.DevelopmentKit.Tracers.InformationRetrieval
36 private readonly
string _baseScript = Settings.Default.Resources +
"GibbsLDA-GA.R";
37 private readonly
string[] _requiredPackages =
new string[] {
"GA",
"slam",
"tm",
"topicmodels" };
39 private TLArtifactsCollection _source;
40 private TLArtifactsCollection _target;
42 private string _outputFile;
47 public override string BaseScript
58 public override string[] RequiredPackages
62 return _requiredPackages;
85 DirectoryInfo sourceInfo = SaveArtifactsToCache(_source,
"GibbsLDA-GA.source");
86 DirectoryInfo targetInfo = SaveArtifactsToCache(_target,
"GibbsLDA-GA.target");
88 _arguments =
new List<object>();
89 _arguments.Add(sourceInfo.FullName);
90 _arguments.Add(targetInfo.FullName);
91 _arguments.Add(_outputFile);
93 _arguments.Add(_config.GibbsIterations);
94 _arguments.Add(_config.Alpha);
95 _arguments.Add(_config.Beta);
96 _arguments.Add(_config.GA_Iterations);
97 _arguments.Add(_config.Run);
98 _arguments.Add(_config.PermutationRate);
99 _arguments.Add(_config.Population);
100 _arguments.Add(_config.Elitism);
101 _arguments.Add(_config.Seed);
111 TextReader resultFile =
new StreamReader(_outputFile);
112 string[] results = resultFile.ReadToEnd().Split(
new char[] {
'\t' }, StringSplitOptions.RemoveEmptyEntries);
113 if (results.Length != 4)
115 throw new RDataException(
"Results file in incorrect format (" + _outputFile +
")");
119 NumTopics = Convert.ToInt32(Math.Round(Convert.ToDouble(results[0]))),
120 GibbsIterations = Convert.ToInt32(Math.Round(Convert.ToDouble(results[1]))),
121 Alpha = Convert.ToDouble(results[2]),
122 Beta = Convert.ToDouble(results[3]),
132 private DirectoryInfo SaveArtifactsToCache(TLArtifactsCollection artifacts,
string name)
135 foreach (TLArtifact artifact
in artifacts.Values)
137 TextWriter tw =
new StreamWriter(Path.Combine(info.FullName, artifact.Id));
138 tw.Write(artifact.Text);