Esempio n. 1
0
        private CompAnalyse PrepareLongerAndShorter(string a, string b, CompAnalyse obj)
        {
            var r           = @"[\`\s\r\n\t~!@#$%^&*()_|+\-=?;:',.<>\{\}\[\]\\\/]";
            var copyASorted = a.Replace(r, "").ToLower();
            var copyBSorted = b.Replace(r, "").ToLower();

            var aLength = copyASorted.Length;
            var bLength = copyBSorted.Length;

            var shorter = copyASorted;
            var longer  = copyBSorted; //

            // TODO : factorize dooble values

            if (aLength > bLength)
            {
                shorter = copyBSorted;
                longer  = copyASorted;
            }
            Reflector.Merge(obj, new CompAnalyse()
            {
                Shorter = shorter,
                Longer  = longer
            });

            return(obj);
        }
Esempio n. 2
0
        private int CountWordInversion(string k, CompAnalyse obj)
        {
            int newIndexA = obj.Shorter.IndexOf(k);
            int newIndexB = obj.Longer.IndexOf(k);

            bool hasPermutation = newIndexA < obj.IShorter != newIndexB < obj.ILonger;

            obj.IShorter = newIndexA;
            obj.ILonger  = newIndexB;

            return(hasPermutation ? 1 : 0);
        }
Esempio n. 3
0
        private void factorizeSentences(List <string> keys, CompAnalyse obj)
        {
            // looping over sentences to factorize them with matching keys

            foreach (string k in keys)
            {
                obj.Invers += CountWordInversion(k, obj);

                Regex rgx = new Regex(k);

                obj.Shorter = rgx.Replace(obj.Shorter, "", 1);
                obj.Longer  = rgx.Replace(obj.Longer, "", 1);
            }
        }
Esempio n. 4
0
        public int SentenceCompare(string a, string b)
        {
            CompAnalyse obj = PrepareLongerAndShorter(a, b, new CompAnalyse()
            {
                IShorter = 0,
                ILonger  = 0,
                Invers   = 0
            });

            var keys = SequenceMatcher.MatchingSequences(obj.Shorter, obj.Longer)
                       .Matches; //

            factorizeSentences(keys, obj);

            double result = SCompare(
                string.Join("", keys) + obj.Shorter,
                string.Join("", keys) + obj.Longer
                );

            // if there is an inversion between 2 words
            // a percentage will be substracted
            Console.WriteLine(obj.Invers);
            return((int)(result / (1 + obj.Invers * 0.05)));
        }