18 using RPlugin.Exceptions;
20 using System.Collections.Generic;
22 using System.Reflection;
23 using TraceLab.Components.DevelopmentKit.IO;
24 using TraceLab.Components.RPlugin.Properties;
25 using TraceLab.Components.Types.Tracers.InformationRetrieval;
26 using TraceLabSDK.Types;
28 namespace TraceLab.Components.DevelopmentKit.Tracers.InformationRetrieval
35 private readonly
string _baseScript = Settings.Default.Resources +
"RTM.R";
36 private readonly
string[] _requiredPackages =
new string[] {
"lda" };
41 private string _outputFile;
46 public override string BaseScript
57 public override string[] RequiredPackages
61 return _requiredPackages;
71 public RTMScript(TLArtifactsCollection source, TLArtifactsCollection target,
RTMConfig config) : base()
85 _corpus =
new LDACorpus(
"RTM", source, target);
98 _corpus =
new LDACorpus(
"RTM", matrix, sourceIDs, targetIDs);
108 _info = _corpus.Save();
110 _arguments =
new List<object>();
111 _arguments.Add(_info.Corpus);
112 _arguments.Add(_info.Vocab);
113 _arguments.Add(_info.Edges);
114 _arguments.Add(_info.Links);
115 _arguments.Add(_outputFile);
116 _arguments.Add(_config.NumTopics);
117 _arguments.Add(_config.NumIterations);
118 _arguments.Add(_config.Alpha);
119 _arguments.Add(_config.Eta);
120 _arguments.Add(_config.RTMBeta);
121 _arguments.Add(_config.PredictionBeta);
122 _arguments.Add(_config.Seed);
132 TextReader rfile =
new StreamReader(_outputFile);
133 string rawdata = rfile.ReadToEnd();
135 TLSimilarityMatrix matrix =
new TLSimilarityMatrix();
136 string[] sims = rawdata.Remove(0, 2).Replace(
")", String.Empty).Split(
new char[] {
',' }, StringSplitOptions.RemoveEmptyEntries);
138 if (sims.Length != edges.Length)
139 throw new RDataException(
"Results are incorrect size: " + sims.Length +
" vs " + edges.Length);
140 for (
int i = 0; i < sims.Length; i++)
142 string[] split = edges[i].Split();
143 matrix.AddLink(_corpus.Map[Convert.ToInt32(split[0])], _corpus.Map[Convert.ToInt32(split[1])], Convert.ToDouble(sims[i]));