Exemplo n.º 1
0
        public void TestDistanceCharacterInsDelInterface()
        {
            var instance = new WeightedLevenshtein(new ExampleCharSub(), new ExampleInsDel());

            // Same as testDistance above.
            Assert.Equal(0.0, instance.Distance("String1", "String1"), 1);
            Assert.Equal(0.5, instance.Distance("String1", "Srring1"), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2"), 1);

            // Cost of insert of 'i' is less than normal, so these scores are
            // different than testDistance above.  Note that the cost of delete
            // has been set differently than the cost of insert, so the distance
            // call is not symmetric in its arguments if an 'i' has changed.
            Assert.Equal(0.5, instance.Distance("Strng", "String"), 1);
            Assert.Equal(0.8, instance.Distance("String", "Strng"), 1);
            Assert.Equal(1.0, instance.Distance("Strig", "String"), 1);
            Assert.Equal(1.0, instance.Distance("String", "Strig"), 1);

            // Same as above with limits.
            Assert.Equal(0.0, instance.Distance("String1", "String1", double.MaxValue), 1);
            Assert.Equal(0.0, instance.Distance("String1", "String1", 2.0), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2", double.MaxValue), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2", 2.0), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2", 1.5), 1);
            Assert.Equal(1.0, instance.Distance("String1", "Srring2", 1.0), 1);
            Assert.Equal(4.0, instance.Distance("String1", "Potato", 4.0), 1);

            NullEmptyTests.TestDistance(instance);
        }
Exemplo n.º 2
0
        public void TestDistance()
        {
            var instance = new QGram(k: 2);

            // AB BC CD CE
            // 1  1  1  0
            // 1  1  0  1
            // Total: 2

            var result = instance.Distance("ABCD", "ABCE");

            Assert.Equal(expected: 2.0, actual: result);

            Assert.Equal(
                expected: 0.0,
                actual: instance.Distance("S", "S"),
                precision: 1); // 0.0

            Assert.Equal(
                expected: 0.0,
                actual: instance.Distance("012345", "012345"),
                precision: 1); // 0.0

            // NOTE: not using null/empty tests in NullEmptyTests because QGram is different
            Assert.Equal(0.0, instance.Distance("", ""), 1);
            Assert.Equal(2.0, instance.Distance("", "foo"), 1);
            Assert.Equal(2.0, instance.Distance("foo", ""), 1);

            NullEmptyTests.AssertArgumentNullExceptions(instance);
        }
Exemplo n.º 3
0
        public void TestDistance()
        {
            var s0 = "ABABABAB";
            var s1 = "ABCABCABCABC";
            var s2 = "POIULKJH";

            var ngram = new NGram();

            Assert.True(ngram.Distance(s0, s1) < ngram.Distance(s0, s2));

            Assert.Equal(
                expected: 0.0,
                actual: ngram.Distance("SIJK", "SIJK"),
                precision: 1); // 0.0

            Assert.Equal(
                expected: 0.0,
                actual: ngram.Distance("S", "S"),
                precision: 1); // 0.0

            Assert.Equal(
                expected: 1.0,
                actual: ngram.Distance("", "S"),
                precision: 1); // 0.0

            Assert.Equal(
                expected: 1.0,
                actual: ngram.Distance("", "SIJK"),
                precision: 1); // 0.0

            NullEmptyTests.TestDistance(ngram);
        }
Exemplo n.º 4
0
        public void TestDistance()
        {
            var instance = new MetricLCS();

            NullEmptyTests.TestDistance(instance);

            // TODO: regular (non-null/empty) distance tests
        }
Exemplo n.º 5
0
        public void TestDistance()
        {
            var instance = new JaroWinkler();

            NullEmptyTests.TestDistance(instance);

            // TODO: regular (non-null/empty) distance tests
        }
Exemplo n.º 6
0
        public void TestSimilarity()
        {
            var instance = new NormalizedLevenshtein();

            NullEmptyTests.TestSimilarity(instance);

            // TODO: regular (non-null/empty) similarity tests
        }
Exemplo n.º 7
0
        public void TestDistance()
        {
            var instance = new RatcliffObershelp();

            NullEmptyTests.TestDistance(instance);

            /// TODO: regular (non-null/empty) distance tests
        }
Exemplo n.º 8
0
        public void TestDistance()
        {
            var instance = new NormalizedLevenshtein();

            NullEmptyTests.TestDistance(instance);

            // TODO: regular (non-null/empty) distance tests
        }
Exemplo n.º 9
0
        public void TestDistance()
        {
            var instance = new WeightedLevenshtein(new ExampleCharSub());

            Assert.Equal(0.0, instance.Distance("String1", "String1"), 1);
            Assert.Equal(0.5, instance.Distance("String1", "Srring1"), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2"), 1);

            NullEmptyTests.TestDistance(instance);
        }
Exemplo n.º 10
0
        public void TestDistance()
        {
            var instance = new Damerau();

            Assert.Equal(expected: 1.0, actual: instance.Distance("ABCDEF", "ABDCEF"));
            Assert.Equal(expected: 2.0, actual: instance.Distance("ABCDEF", "BACDFE"));
            Assert.Equal(expected: 1.0, actual: instance.Distance("ABCDEF", "ABCDE"));

            NullEmptyTests.TestDistance(instance);
        }
Exemplo n.º 11
0
        public void TestDistance()
        {
            var instance = new Levenshtein();

            Assert.Equal(expected: 1.0, actual: instance.Distance("My string", "My tring"));
            Assert.Equal(expected: 2.0, actual: instance.Distance("My string", "M string2"));
            Assert.Equal(expected: 1.0, actual: instance.Distance("My string", "My $tring"));

            NullEmptyTests.TestDistance(instance);
        }
Exemplo n.º 12
0
        public void TestDistance()
        {
            var instance = new Jaccard(k: 2);

            var result = instance.Distance("ABCDE", "ABCDF");

            Assert.Equal(expected: 0.4, actual: result);

            NullEmptyTests.TestDistance(instance);
        }
        public void TestDistance()
        {
            var instance = new LongestCommonSubsequence();

            // LCS = GA or GC => distance = 4 (remove 3 letters and add 1)

            Assert.Equal(expected: 4, actual: instance.Distance("AGCAT", "GAC"));
            Assert.Equal(expected: 1, actual: instance.Distance("AGCAT", "AGCT"));

            NullEmptyTests.TestDistance(instance);
        }
Exemplo n.º 14
0
        public void TestSimilarity()
        {
            var instance = new Cosine();

            var result = instance.Similarity("ABC", "ABCE");

            Assert.Equal(
                expected: 0.71,
                actual: result,
                precision: 2 // 0.01
                );

            NullEmptyTests.TestSimilarity(instance);
        }
Exemplo n.º 15
0
        public void TestSimilarity()
        {
            var instance = new Jaccard(k: 2);

            // AB BC CD DE DF
            // 1  1  1  1  0
            // 1  1  1  0  1
            // => 3 / 5 = 0.6
            var result = instance.Similarity("ABCDE", "ABCDF");

            Assert.Equal(expected: 0.6, actual: result);

            NullEmptyTests.TestSimilarity(instance);
        }
        public void TestSimilarity()
        {
            var instance = new SorensenDice(2);

            // AB BC CD DE DF FG
            // 1  1  1  1  0  0
            // 1  1  1  0  1  1
            // => 2 x 3 / (4 + 5) = 6/9 = 0.6666
            var result = instance.Similarity("ABCDE", "ABCDFG");

            Assert.Equal(
                expected: 0.6667, // last digit should be 7 because of rounding
                actual: result,
                precision: 4      //0.0001
                );

            NullEmptyTests.TestSimilarity(instance);
        }
Exemplo n.º 17
0
        public void TestSimilarity()
        {
            var instance = new JaroWinkler();

            Assert.Equal(
                expected: 0.974074,
                actual: instance.Similarity("My string", "My tsring"),
                precision: 6 // 0.000001
                );

            Assert.Equal(
                expected: 0.896296,
                actual: instance.Similarity("My string", "My ntrisg"),
                precision: 6 // 0.000001
                );

            NullEmptyTests.TestSimilarity(instance);
        }
Exemplo n.º 18
0
        public void TestDistance()
        {
            var instance = new WeightedLevenshtein(new ExampleCharSub());

            Assert.Equal(0.0, instance.Distance("String1", "String1"), 1);
            Assert.Equal(0.5, instance.Distance("String1", "Srring1"), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2"), 1);

            // One insert or delete.
            Assert.Equal(1.0, instance.Distance("Strng", "String"), 1);
            Assert.Equal(1.0, instance.Distance("String", "Strng"), 1);

            // With limits.
            Assert.Equal(0.0, instance.Distance("String1", "String1", double.MaxValue), 1);
            Assert.Equal(0.0, instance.Distance("String1", "String1", 2.0), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2", double.MaxValue), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2", 2.0), 1);
            Assert.Equal(1.5, instance.Distance("String1", "Srring2", 1.5), 1);
            Assert.Equal(1.0, instance.Distance("String1", "Srring2", 1.0), 1);
            Assert.Equal(4.0, instance.Distance("String1", "Potato", 4.0), 1);

            NullEmptyTests.TestDistance(instance);
        }
        public void TestDistance()
        {
            var instance = new OptimalStringAlignment();

            // zero length
            Assert.Equal(
                expected: 6.0,
                actual: instance.Distance("", "ABCDEF"),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 6.0,
                actual: instance.Distance("ABCDEF", ""),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 0.0,
                actual: instance.Distance("", ""),
                precision: 0 // 0.0
                );

            // equality
            Assert.Equal(
                expected: 0.0,
                actual: instance.Distance("ABCDEF", "ABCDEF"),
                precision: 0 // 0.0
                );

            // single operation
            Assert.Equal(
                expected: 1.0,
                actual: instance.Distance("ABDCFE", "ABDCEF"),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 1.0,
                actual: instance.Distance("BBDCEF", "ABDCEF"),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 1.0,
                actual: instance.Distance("BDCEF", "ABDCEF"),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 1.0,
                actual: instance.Distance("ABDCEF", "ADCEF"),
                precision: 0 // 0.0
                );

            // other
            Assert.Equal(
                expected: 3.0,
                actual: instance.Distance("CA", "ABC"),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 2.0,
                actual: instance.Distance("BAC", "CAB"),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 4.0,
                actual: instance.Distance("abcde", "awxyz"),
                precision: 0 // 0.0
                );
            Assert.Equal(
                expected: 5.0,
                actual: instance.Distance("abcde", "vwxyz"),
                precision: 0 // 0.0
                );

            NullEmptyTests.TestDistance(instance);
        }
Exemplo n.º 20
0
        public void TestSimilarity()
        {
            var instance = new RatcliffObershelp();

            /// test data from other algorithms
            /// "My string" vs "My tsring"
            /// Substrings:
            /// "ring" ==> 4, "My s" ==> 3, "s" ==> 1
            /// Ratcliff-Obershelp = 2*(sum of substrings)/(length of s1 + length of s2)
            ///                    = 2*(4 + 3 + 1) / (9 + 9)
            ///                    = 16/18
            ///                    = 0.888888888888889
            Assert.Equal(
                expected: 0.888888888888889,
                actual: instance.Similarity("My string", "My tsring"),
                precision: 15 /// 0.000000000000001
                );

            /// test data from other algorithms
            /// "My string" vs "My tsring"
            /// Substrings:
            /// "My " ==> 3, "tri" ==> 3, "g" ==> 1
            /// Ratcliff-Obershelp = 2*(sum of substrings)/(length of s1 + length of s2)
            ///                    = 2*(3 + 3 + 1) / (9 + 9)
            ///                    = 14/18
            ///                    = 0.777777777777778
            Assert.Equal(
                expected: 0.777777777777778,
                actual: instance.Similarity("My string", "My ntrisg"),
                precision: 15 /// 0.000000000000001
                );

            /// test data from essay by Ilya Ilyankou
            /// "Comparison of Jaro-Winkler and Ratcliff/Obershelp algorithms
            /// in spell check"
            /// https://ilyankou.files.wordpress.com/2015/06/ib-extended-essay.pdf
            /// p13, expected result is 0.857
            Assert.Equal(
                expected: 0.857,
                actual: instance.Similarity("MATEMATICA", "MATHEMATICS"),
                precision: 3 /// 0.001
                );

            /// test data from stringmetric
            /// https://github.com/rockymadden/stringmetric
            /// expected output is 0.736842105263158
            Assert.Equal(
                expected: 0.736842105263158,
                actual: instance.Similarity("aleksander", "alexandre"),
                precision: 15 /// 0.000000000000001
                );

            /// test data from stringmetric
            /// https://github.com/rockymadden/stringmetric
            /// expected output is 0.666666666666667
            Assert.Equal(
                expected: 0.666666666666667,
                actual: instance.Similarity("pennsylvania", "pencilvaneya"),
                precision: 15 /// 0.000000000000001
                );

            /// test data from wikipedia
            /// https://en.wikipedia.org/wiki/Gestalt_Pattern_Matching
            /// expected output is 14/18 = 0.777777777777778‬
            Assert.Equal(
                expected: 0.777777777777778,
                actual: instance.Similarity("WIKIMEDIA", "WIKIMANIA"),
                precision: 15 /// 0.000000000000001
                );

            /// test data from wikipedia
            /// https://en.wikipedia.org/wiki/Gestalt_Pattern_Matching
            /// expected output is 24/40 = 0.6
            Assert.Equal(
                expected: 0.6,
                actual: instance.Similarity("GESTALT PATTERN MATCHING", "GESTALT PRACTICE"),
                precision: 15 /// 0.000000000000001
                );

            NullEmptyTests.TestSimilarity(instance);
        }
        public void TestDistance()
        {
            var instance = new SorensenDice();

            NullEmptyTests.TestDistance(instance);
        }