19 using TraceLabSDK.Types;
21 namespace TraceLab.Components.DevelopmentKit.IO
34 public static TLSimilarityMatrix
Import(String filename)
36 StreamReader file =
new StreamReader(filename);
37 TLSimilarityMatrix answer =
new TLSimilarityMatrix();
40 while ((line = file.ReadLine()) != null)
43 if (String.IsNullOrWhiteSpace(line))
47 String[] artifacts = line.Split(
'\t');
48 String source = artifacts[0];
49 String target = artifacts[1];
50 double score = Convert.ToDouble(artifacts[2]);
51 answer.AddLink(source, target, score);
53 catch (IndexOutOfRangeException e)
69 public static void Export(TLSimilarityMatrix matrix,
string filename)
71 TextWriter file =
new StreamWriter(filename);
72 TLLinksList links = matrix.AllLinks;
74 foreach (TLSingleLink link
in links)
76 file.WriteLine(
"{0}\t{1}\t{2}", link.SourceArtifactId, link.TargetArtifactId, link.Score);
89 public static void ExportCSV(TLSimilarityMatrix similarityMatrix,
string outputPath)
91 if (similarityMatrix == null)
95 if (outputPath == null)
99 if (!System.IO.Path.IsPathRooted(outputPath))
101 throw new DevelopmentKitException(String.Format(
"Absolute output path is required. Given path is '{0}'", outputPath));
103 if (outputPath.EndsWith(
".csv", StringComparison.CurrentCultureIgnoreCase) ==
false)
105 outputPath = outputPath +
".csv";
107 using (System.IO.TextWriter writeFile =
new StreamWriter(outputPath))
109 WriteMatrixCSV(similarityMatrix, writeFile);
120 private static void WriteMatrixCSV(TLSimilarityMatrix similarityMatrix, System.IO.TextWriter writeFile)
123 writeFile.WriteLine(
"Source Artifact Id,Target Artifact Id,Probability");
124 TLLinksList traceLinks = similarityMatrix.AllLinks;
126 foreach (TLSingleLink link
in traceLinks)
128 writeFile.WriteLine(
"{0},{1},{2}", link.SourceArtifactId, link.TargetArtifactId, link.Score);
140 public static void ExportCSVWithCorrectness(TLSimilarityMatrix similarityMatrix, TLSimilarityMatrix answerMatrix,
string outputPath)
142 if (similarityMatrix == null)
146 if (answerMatrix == null)
150 if (outputPath == null)
154 if (!System.IO.Path.IsPathRooted(outputPath))
156 throw new DevelopmentKitException(String.Format(
"Absolute output path is required. Given path is '{0}'", outputPath));
158 if (outputPath.EndsWith(
".csv", StringComparison.CurrentCultureIgnoreCase) ==
false)
160 outputPath = outputPath +
".csv";
162 using (System.IO.TextWriter writeFile =
new StreamWriter(outputPath))
164 WriteMatrixCSVWithCorrectness(similarityMatrix, answerMatrix, writeFile);
178 private static void WriteMatrixCSVWithCorrectness(TLSimilarityMatrix similarityMatrix, TLSimilarityMatrix answerMatrix, System.IO.TextWriter writeFile)
181 writeFile.WriteLine(
"Source Artifact Id,Target Artifact Id,Probability,Is correct");
182 TLLinksList traceLinks = similarityMatrix.AllLinks;
184 foreach (TLSingleLink link
in traceLinks)
186 writeFile.WriteLine(
"{0},{1},{2},{3}", link.SourceArtifactId, link.TargetArtifactId, link.Score, (answerMatrix.IsLinkAboveThreshold(link.SourceArtifactId, link.TargetArtifactId)) ?
"1" :
"0");
192 #region Export to Excel spreadsheet
201 public static void ExportExcelSpreadsheet(TLSimilarityMatrix similarityMatrix, TLSimilarityMatrix answerMatrix,
string outputPath)
203 if (similarityMatrix == null)
207 if (answerMatrix == null)
211 if (outputPath == null)
215 if (!System.IO.Path.IsPathRooted(outputPath))
217 throw new DevelopmentKitException(String.Format(
"Absolute output path is required. Given path is '{0}'", outputPath));
219 if (outputPath.EndsWith(
".xsl", StringComparison.CurrentCultureIgnoreCase) ==
false)
221 outputPath = outputPath +
".xsl";
223 Microsoft.Office.Interop.Excel.Application xlApp;
224 Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
225 Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
226 object misValue = System.Reflection.Missing.Value;
227 xlApp =
new Microsoft.Office.Interop.Excel.Application();
228 xlWorkBook = xlApp.Workbooks.Add(misValue);
229 xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
230 ReadSimilarityMatrixToExcelWorksheet(similarityMatrix, answerMatrix, xlWorkSheet);
231 xlWorkBook.SaveAs(outputPath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
232 xlWorkBook.Close(
true, misValue, misValue);
234 ReleaseExcelObject(xlWorkSheet);
235 ReleaseExcelObject(xlWorkBook);
236 ReleaseExcelObject(xlApp);
245 private static void ReadSimilarityMatrixToExcelWorksheet(TLSimilarityMatrix similarityMatrix, TLSimilarityMatrix answerMatrix, Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet)
249 xlWorkSheet.Cells[row, 1] =
"Source Artifact Id";
250 xlWorkSheet.Cells[row, 2] =
"Target Artifact Id";
251 xlWorkSheet.Cells[row, 3] =
"Probability";
252 xlWorkSheet.Cells[row, 4] =
"Is correct";
254 foreach (
string sourceArtifact
in similarityMatrix.SourceArtifactsIds)
256 var traceLinks = similarityMatrix.GetLinksAboveThresholdForSourceArtifact(sourceArtifact);
258 foreach (TLSingleLink link
in traceLinks)
260 xlWorkSheet.Cells[row, 1] = link.SourceArtifactId;
261 xlWorkSheet.Cells[row, 2] = link.TargetArtifactId;
262 xlWorkSheet.Cells[row, 3] = link.Score;
263 xlWorkSheet.Cells[row, 4] = (answerMatrix.IsLinkAboveThreshold(link.SourceArtifactId, link.TargetArtifactId)) ?
"1" :
"0";
273 private static void ReleaseExcelObject(
object obj)
277 System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
283 throw new Exception(
"Exception occured while releasing excel object " + ex.ToString());