private double GetRangePhrase(CAnalizeObject source, CAnalizeObject search, bool translation)
        {
            if (!source.Words.Any())
            {
                if (!search.Words.Any())
                {
                    return(0);
                }
                return(search.Words.Sum(w => w.Text.Length) * 2 * 100);
            }
            if (!search.Words.Any())
            {
                return(source.Words.Sum(w => w.Text.Length) * 2 * 100);
            }
            double Result = 0;

            for (var I = 0; I < search.Words.Count; I++)
            {
                var MinRangeWord = double.MaxValue;
                var MinIndex     = 0;
                for (var J = 0; J < source.Words.Count; J++)
                {
                    var CurrentRangeWord = GetRangeWord(source.Words[J], search.Words[I], translation);
                    if (CurrentRangeWord < MinRangeWord)
                    {
                        MinRangeWord = CurrentRangeWord;
                        MinIndex     = J;
                    }
                }
                //TODO вычислить коэффициент (100)
                Result += MinRangeWord * 100 + Math.Abs(I - MinIndex) / 10.0;
            }
            return(Result);
        }
        public List <Tuple <string, string, double, int> > Search(string targetStr)
        {
            var CodeKeys          = s_codeKeysRus.Concat(s_codeKeysEng).ToList();
            var OriginalSearchObj = new CAnalizeObject();

            if (targetStr.Length > 0)
            {
                OriginalSearchObj.Words = targetStr.Split(' ').Select(w => new CWord()
                {
                    Text  = w.ToLower(),
                    Codes = GetKeyCodes(CodeKeys, w)
                }).ToList();
            }
            var TranslationSearchObj = new CAnalizeObject();

            if (targetStr.Length > 0)
            {
                TranslationSearchObj.Words = targetStr.Split(' ').Select(w => {
                    var TranslateStr = Transliterate(w.ToLower(), s_translitRuEn);
                    return(new CWord()
                    {
                        Text = TranslateStr,
                        Codes = GetKeyCodes(CodeKeys, TranslateStr)
                    });
                }).ToList();
            }
            var Result = new List <Tuple <string, string, double, int> >();

            foreach (var Sampl in Samples)
            {
                var LanguageType = 1;
                var Cost         = GetRangePhrase(Sampl.Rus, OriginalSearchObj, false);
                var TempCost     = GetRangePhrase(Sampl.Eng, OriginalSearchObj, false);
                if (Cost > TempCost)
                {
                    Cost         = TempCost;
                    LanguageType = 3;
                }

                TempCost = GetRangePhrase(Sampl.Rus, TranslationSearchObj, true);
                if (Cost > TempCost)
                {
                    Cost         = TempCost;
                    LanguageType = 2;
                }
                TempCost = GetRangePhrase(Sampl.Eng, TranslationSearchObj, true);
                if (Cost > TempCost)
                {
                    Cost         = TempCost;
                    LanguageType = 3;
                }
                Result.Add(new Tuple <string, string, double, int>(Sampl.Rus.Origianl, Sampl.Eng.Origianl, Cost, LanguageType));
            }
            return(Result);
        }
 public CLanguageSet()
 {
     Rus = new CAnalizeObject();
     Eng = new CAnalizeObject();
 }