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