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; }