2

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では、並列化にどのルールを使用する必要がありますか?

ありがとうございました!

4

1 に答える 1

2

内側のループを平行にするだけです

パラレルクラス

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で宣言する方が良いと思います。
「ルール」の意味がわからない。

于 2012-12-15T14:39:00.007 に答える