public void JaccardDistanceTest( ) { JaccardDistance dist = new JaccardDistance( ); Assert.Throws <ArgumentException>(() => dist.GetDistance(p0, q4)); double result = dist.GetDistance(p0, q0); Assert.AreEqual(result, 1); result = dist.GetDistance(p1, q1); Assert.AreEqual(result, 1); result = dist.GetDistance(p2, q2); Assert.AreEqual(result, 0); result = dist.GetDistance(p3, q3); Assert.AreEqual(result, 0); result = dist.GetDistance(p4, q4); Assert.AreApproximatelyEqual(result, 0.66666, 0.00001); result = dist.GetDistance(p5, q5); Assert.AreApproximatelyEqual(result, 0.9, 0.1); }
/// <summary> /// JaccardDistance calculation to determine /// matching similar responses /// </summary> /// <param name="input"></param> /// <param name="memory"></param> /// <returns></returns> protected double calculateMatchRateJ(ArrayList input, ArrayList memory) { // instantiate new distance class JaccardDistance dist = new JaccardDistance(); // create two vectors for inputs //double[] p = new double[] { 2.5, 3.5, 3.0, 3.5, 2.5, 3.0 }; double[] p = DigitizePhonemes(input); //double[] q = new double[] { 3.0, 3.5, 1.5, 5.0, 3.5, 3.0 }; double[] q = DigitizePhonemes(memory); List <double> q1 = EqualizeVector(p, q); double[] q2 = q1.ToArray(); // get distance between the two vectors double distance = dist.GetDistance(p, q2); return(distance); }