예제 #1
0
        public void CompareStringMetrics(string s1, string s2)
        {
            var consine      = new F23.StringSimilarity.Cosine().Distance(s1, s2);
            var damerau      = new F23.StringSimilarity.Damerau().Distance(s1, s2);
            var jaccard      = new F23.StringSimilarity.Jaccard().Distance(s1, s2);
            var jarodwinkler = new F23.StringSimilarity.JaroWinkler().Distance(s1, s2);
            var levenshtein  = new F23.StringSimilarity.Levenshtein().Distance(s1, s2);

            var lcs  = new F23.StringSimilarity.LongestCommonSubsequence().Distance(s1, s2);
            var mlcs = new F23.StringSimilarity.MetricLCS().Distance(s1, s2);
            var ng   = new F23.StringSimilarity.NGram().Distance(s1, s2);
            var nl   = new F23.StringSimilarity.NormalizedLevenshtein().Distance(s1, s2);
            var osa  = new F23.StringSimilarity.OptimalStringAlignment().Distance(s1, s2);
            var qg   = new F23.StringSimilarity.QGram().Distance(s1, s2);
            //var ng = new F23.StringSimilarity.ShingleBased
            var sd = new F23.StringSimilarity.SorensenDice().Distance(s1, s2);

            //var wl = new F23.StringSimilarity.WeightedLevenshtein().Distance

            Console.WriteLine("consine score = {0}", consine.ToString());
            Console.WriteLine("damerau score = {0}", damerau.ToString());
            Console.WriteLine("jaccard score = {0}", jaccard.ToString());
            Console.WriteLine("jarodwinkler score = {0}", jarodwinkler.ToString());
            Console.WriteLine("levenshtein score = {0}", levenshtein.ToString());

            Console.WriteLine("lcs score = {0}", lcs.ToString());
            Console.WriteLine("mlcs score = {0}", mlcs.ToString());
            Console.WriteLine("ng score = {0}", ng.ToString());
            Console.WriteLine("nl score = {0}", nl.ToString());
            Console.WriteLine("osa score = {0}", osa.ToString());
            Console.WriteLine("qg score = {0}", qg.ToString());
            //Console.WriteLine("ng score = {0}",ng.ToString());
            Console.WriteLine("sd score = {0}", sd.ToString());
            //Console.WriteLine("wl score = {0}",wl.ToString());
        }
        public static async Task Compare(CommandParameters parameters)
        {
            var levenshtein = new F23.StringSimilarity.NormalizedLevenshtein();
            var adverbs     = new HashSet <string>(await File.ReadAllLinesAsync("all-adverbs.txt"));

            var A = GetSignificantContent(parameters.Arguments[0]);
            var B = GetSignificantContent(parameters.Arguments[1]);

            var duplicate = (A == B) || levenshtein.Distance(A, B) < .25f;

            await parameters.SocketMessage.Channel.SendMessageAsync($"{A}≈{B}={duplicate}");

            string GetSignificantContent(string content)
            {
                string lower = " " + content.Normalize().ToLower() + " ";

                foreach (var adverb in adverbs)
                {
                    lower = lower.Replace(" " + adverb + " ", " ");
                }

                return(lower.Trim());
            }
        }