В процессе автоматизации бизнес-процессов разработчики часто сталкиваются с человеческим фактором. Типичная ситуация: для обеспечения качества работы сотрудников вводится ограничение на минимальную длину комментария (например, 100 символов). Однако вместо содержательного текста пользователи начинают вводить бессмысленные наборы букв типа "asdfghjkl" или "фывафыва". Разберем, какими программными методами можно определить, является ли введенная строка осмысленным текстом или просто «мусором».
Проанализируем один из самых оригинальных и эффективных внутренних способов 1С. Суть метода заключается в том, что стандартные функции склонения (например, входящие в состав БСП или использующие внешние компоненты) работают со словарями. Если слово является «реальным», система сможет изменить его форму. Если же введена «абракадабра», функция склонения, как правило, вернет исходную строку без изменений.
Рассмотрим алгоритм реализации: мы берем каждое слово из введенного текста и пытаемся получить его форму в родительном падеже. Если после попытки склонения 95% слов остались неизменными, с высокой долей вероятности перед нами бессвязный набор символов. Посмотрим на пример логики:
// Пример логики проверки через склонение
Функция ТекстЯвляетсяОсмысленным(Знач ИсхТекст)
МассивСлов = СтрРазделить(ИсхТекст, " ,.-!?", Ложь);
СчетчикСклоняемых = 0;
Для Каждого Слово Из МассивСлов Цикл
Если СтрДлина(Слово) < 3 Тогда
Продолжить;
КонецЕсли;
// Используем стандартный механизм склонения (например, из БСП)
РезультатСклонения = СклонениеФИО.Просклонять(Слово, 2); // 2 - родительный падеж
Если ВРег(Слово) <> ВРег(РезультатСклонения) Тогда
СчетчикСклоняемых = СчетчикСклоняемых + 1;
КонецЕсли;
КонецЦикла;
// Если склоняемых слов меньше определенного порога - это белиберда
Возврат СчетчикСклоняемых > (МассивСлов.Количество() * 0.2);
КонецФункции
Простая проверка на длину строки в символах легко обходится. Гораздо эффективнее контролировать минимальное количество слов. Выясним причину: написать осмысленное предложение из 5–7 слов сложнее, чем просто зажать одну клавишу. Дополнительно следует вести словарь «заполнителей» — список слов, которые сотрудники используют для обхода проверки (например, «нет комментария», «заполню позже», «нормально»).
Разберем по шагам реализацию данного подхода:
Наиболее надежным, хотя и требующим интернет-соединения, способом является использование API, таких как Яндекс.Спеллер. Эти сервисы не только проверяют орфографию, но и могут возвращать количество ошибок в тексте. Проанализируем ситуацию: если в тексте из 100 символов количество ошибок превышает 50%, это явный признак того, что текст не несет смысла.
Использование HTTPСоединение позволяет отправить запрос к API и получить JSON с результатами проверки. Если массив найденных ошибок слишком велик, система выдает предупреждение пользователю.
Человеческая речь имеет определенную статистическую структуру. В русском языке гласные и согласные чередуются, а распределение букв неравномерно. Посмотрим на методы статистической оценки:
"ааааа") или групп символов ("нормально нормально нормально").Ленивые пользователи часто вводят символы, которые расположены рядом на физической клавиатуре. Рассмотрим подробнее, как это отследить. Программа может содержать массивы строк, представляющих ряды клавиш: "йцукенгшщз", "asdfghjkl", "12345678". Если введенная пользователем подстрока длиной более 5-6 символов полностью совпадает с последовательностью клавиш (в прямом или обратном порядке), такой ввод следует признать некорректным.
Осмысленный текст длиной 100 символов человек печатает в среднем от 10 до 20 секунд. Если 100 символов появились в поле ввода мгновенно (менее чем за 1 секунду), значит, был использован Ctrl+V (вставка скопированного текста) или зажата клавиша. Выясним, как это применить в 1С: в формах можно отслеживать события начала изменения текста и окончания. Разница во времени между этими событиями может служить косвенным признаком качества ввода.
Важный момент: не стоит полагаться только на один метод. Наилучший результат дает комбинация:
Такой комплексный фильтр заставит даже самого ленивого сотрудника написать хотя бы одно короткое, но осмысленное предложение по сути дела.