예제 #1
0
        /** проверка матерных слов, все строки должны быть заменены */
        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);
        }
예제 #2
0
        /** проверка отдельных не матерных слов с приставками и суффиксами. замен быть не должно */
        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("Успешно закончена проверка слов в комбинации с предлогами");
        }
예제 #3
0
        /** проверка не матерных слов. замен быть не должно */
        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);
        }
예제 #4
0
        /** Проверка шаблонов */
        private static void TestRules(IAntimat antimat)
        {
            Console.WriteLine("Проверка правил.");
            var s = antimat.CheckRules();

            if (!string.IsNullOrEmpty(s))
            {
                throw new Exception("Ошибки в правилах:\n" + s);
            }
            Console.WriteLine("Все правила корректны.");
        }