18 using System.Collections.Generic;
21 using TraceLabSDK.Types;
23 namespace TraceLab.Components.DevelopmentKit.Utils.TermDocumentMatrixUtils
38 if (vec1.Length != vec2.Length)
43 for (
int i = 0; i < vec1.Length; i++)
45 product += (vec1[i] * vec2[i]);
58 for (
int i = 0; i < vector.Length; i++)
60 length += Math.Pow(vector[i], 2);
62 return Math.Sqrt(length);
74 TLSimilarityMatrix sims =
new TLSimilarityMatrix();
76 for (
int i = 0; i < m1.
NumDocs; i++)
78 TLLinksList links =
new TLLinksList();
79 for (
int j = 0; j < m2.
NumDocs; j++)
81 double lengthProduct = ComputeLength(matrices[0].GetDocument(i)) * ComputeLength(matrices[1].GetDocument(j));
82 if (lengthProduct == 0.0)
88 links.Add(
new TLSingleLink(m1.
GetDocumentName(i), m2.
GetDocumentName(j), ComputeDotProduct(matrices[0].GetDocument(i), matrices[1].GetDocument(j)) / lengthProduct));
92 foreach (TLSingleLink link
in links)
94 sims.AddLink(link.SourceArtifactId, link.TargetArtifactId, link.Score);
109 TLSimilarityMatrix sims =
new TLSimilarityMatrix();
110 foreach (
string sourceID
in sourceIDs)
112 double[] sourceDoc = matrix.GetDocument(sourceID);
113 foreach (
string targetID
in targetIDs)
116 double[] targetDoc = matrix.GetDocument(targetID);
117 double lengthProduct = ComputeLength(sourceDoc) * ComputeLength(targetDoc);
118 if (lengthProduct == 0.0)
120 sims.AddLink(sourceID, targetID, 0.0);
124 double score = ComputeDotProduct(sourceDoc, targetDoc) / lengthProduct;
125 sims.AddLink(sourceID, targetID, score);