/** проверка не матерных слов. замен быть не должно */ private static void TestNotAbusive(IAntimat antimat, string file) { Console.WriteLine("Загрузка НЕ матерных слов из файла: " + file); var s = File.ReadAllText(file); int errors = 0; var words = s.Replace("\r", "").Split('\n'); var sb = new StringBuilder(); foreach (var w in words) { if (string.IsNullOrEmpty(w)) { continue; } sb.Append(" ").Append(w); var w2 = antimat.RemoveMat(w); if (w != w2) { Console.WriteLine("ОШИБКА. Ложное срабатывание правила '" + antimat.LastUsedPattern + "' в тексте " + w2); sb.Length = 0; if (++errors > 10) { break; } } if (sb.Length > 2000) { var long1 = sb.ToString(); var long2 = antimat.RemoveMat(long1); if (long1 != long2) { Console.WriteLine("ОШИБКА. Ложное срабатывание правила '" + antimat.LastUsedPattern + "' в полном тексте " + long2); if (++errors > 10) { break; } } sb.Length = 0; } } if (sb.Length > 0) { var long1 = sb.ToString(); var long2 = antimat.RemoveMat(long1); if (long1 != long2) { Console.WriteLine("ОШИБКА. Ложное срабатывание правила '" + antimat.LastUsedPattern + "' в полном тексте " + long2); ++errors; } } if (errors > 0) { throw new Exception("Проверка прервана. Исправьте правила."); } Console.WriteLine("Успешно закончена проверка НЕ матерных слов из файла: " + file); }
/** проверка матерных слов, все строки должны быть заменены */ private static void TestAbusive(IAntimat antimat, string file) { Console.WriteLine("Загрузка матерных слов из файла: " + file); var s = File.ReadAllText(file); int errors = 0; var words = s.Replace("\r", "").Split('\n'); foreach (var w in words) { if (string.IsNullOrEmpty(w)) { continue; } if (w == antimat.RemoveMat(w)) { Console.WriteLine("ОШИБКА. Не произошло замены матерных слов: " + w); if (++errors > 10) { break; } } // else Console.WriteLine(w + " ===> " + w2); } if (errors > 0) { throw new Exception("Проверка прервана. Исправьте правила."); } Console.WriteLine("Успешно закончена проверка матерных слов из файла: " + file); }
/** проверка отдельных не матерных слов с приставками и суффиксами. замен быть не должно */ private static void TestNotAbusiveWithSuffix(IAntimat antimat, string file, string[] predlogs) { Console.WriteLine("Загрузка слов из файла: " + file); var s = File.ReadAllText(file); int errors = 0; var words = s.Replace("\r", "").Split('\n'); Console.Write("0%..."); int lastPercent = 0; for (int i = 0; i < words.Length; i++) { var w = words[i]; if (string.IsNullOrEmpty(w)) { continue; } int percent = i * 100 / words.Length; if (percent > lastPercent) { lastPercent = percent; Console.Write(" " + percent); } // комбинируем слово со всевозможными предлогами var withPredlogs = w + " " + string.Join(" " + w + " ", predlogs) + " " + w; var w2 = antimat.RemoveMat(withPredlogs); if (withPredlogs != w2) { // возможно это некорректная комбинация с предлогом var itError = true; foreach (var wp in WrongPredlogs) { if (w2.IndexOf(wp, StringComparison.Ordinal) >= 0) { itError = false; break; } } if (itError) { Console.WriteLine("\nОШИБКА. Ложное срабатывание правила '" + antimat.LastUsedPattern + "' в тексте " + w2); if (++errors > 10) { break; } } } } if (errors > 0) { throw new Exception("Проверка прервана. Исправьте правила."); } Console.WriteLine(""); Console.WriteLine("Успешно закончена проверка слов в комбинации с предлогами"); }