我想在10000个文本上计算Jaccard相似度。
Jaccard相似度很容易计算:相交的长度除以并集的长度。

string sTtxt1 = "some text one";
string sTtxt2 = "some text two";
string sTtxt3 = "some text three";
HashSet<string[]> hashText= new HashSet<string[]>();
hashText.Add(sTtxt1);
hashText.Add(sTtxt2);
hashText.Add(sTtxt3);
double[,] dSimilarityValue;

for (int i = 0; i < hashText.Count; i++)
{
   dSimilarityValue[i, i] = 100.00;
   for (int j = i + 1; j < dSimilarityValue.Count; j++)
   {
      dSimilarityValue[i, j] = (double) hashText.ElementAt(i).Intersect(hashText.ElementAt(j)).Count() / (double) hashText.ElementAt(i).Union(hashText.ElementAt(j)).Count();
   }
}


使用.NET4,我应该使用哪些规则进行并行化?

谢谢!

最佳答案

只需使内循环平行

Parallel Class

Parallel.For(0, N, i =>
{
   // Do Work.
});


Parallel.For(j, dSimilarityValue.Count, i =>
{
   dSimilarityValue[i, j] =
    (double)hashText.ElementAt(i).Intersect(hashText.ElementAt(j)).Count() /
    (double)hashText.ElementAt(i).Union(hashText.ElementAt(j)).Count();
});


而且我认为最好以new声明Array的大小。
不知道您所说的“规则”是什么意思。

07-27 18:04