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