//итерируемся побуквенно по словарному слову и слову с ошибкой // меньшее по длинне слово точно содержиться в большем static void CompareWords(WordElement word, string Dict) { char[] errorW = word.value.ToCharArray(); char[] DictW = Dict.ToCharArray(); int difference = 0; // сравнение большего слова с меньшим (словарное больше) foreach (var L in errorW) { if (!DictW.Contains(L)) { difference++; if (difference >= 3) { return; } } } foreach (var L in DictW) { if (!errorW.Contains(L)) { difference++; if (difference > 2) { return; } } } word.AssumCorrectList.Add(Dict); }
//делим строки на словарь и контекст //создаем листы со словами из словаря и неверных слов static void SplitRows(List <string> str) { bool content = false; foreach (var i in str) { if (i == "===") { content = true; continue; } if (!content) { foreach (var word in i.Split(' ')) { Dict.Add(word.ToLower()); } } else { foreach (var word in i.Split(' ')) { if (word != "") { WordElement tmp = new WordElement(word); Content.Add(tmp); } } } } }
// проверяем , чтобы две вставки или удаления не стояли рядом static bool AdjacentCheck(WordElement word, List <char> charArr, string assumeWord) { string sample = new string(charArr.ToArray()); if (word.value.Length > assumeWord.Length) { if (word.value.IndexOf(sample) < 0) { List <char> wordCompareList = new List <char>(); foreach (var ch in word.value.ToArray()) { if (ch != charArr[0] || ch != charArr[1]) { wordCompareList.Add(ch); } } var compareWord = new string(wordCompareList.ToArray()); if (assumeWord == compareWord) { return(true); } } else { return(false); } } else { if (assumeWord.IndexOf(sample) < 0) { return(true); } else { return(false); } } return(false); }
//костыль static bool Сrutch(WordElement word, List <char> charArr, string assumeWord) { string sample = new string(charArr.ToArray()); if (word.value.Length > assumeWord.Length) { List <char> wordValArr = new List <char>(); foreach (var ch in word.value.ToCharArray()) { wordValArr.Add(ch); } var tmp = wordValArr; for (int ch = 0; ch < wordValArr.Count(); ch++) { if (wordValArr[ch] == sample.ToCharArray()[0]) { wordValArr.RemoveRange(ch, 1); break; } } string newWord = new string(wordValArr.ToArray()); if (newWord != assumeWord) { return(false); } else { return(true); } } else { List <char> wordValArr = new List <char>(); foreach (var ch in assumeWord.ToCharArray()) { wordValArr.Add(ch); } var tmp = wordValArr; for (int ch = 0; ch < wordValArr.Count(); ch++) { if (wordValArr[ch] == sample.ToCharArray()[0]) { wordValArr.RemoveRange(ch, 1); break; } } string newWord = new string(wordValArr.ToArray()); if (newWord != word.value) { return(false); } else { return(true); } } if (word.value == assumeWord) { return(true); } return(false); }