Как программно проверить осмысленность текста и отличить слово от набора символов в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе автоматизации бизнес-процессов разработчики часто сталкиваются с человеческим фактором. Типичная ситуация: для обеспечения качества работы сотрудников вводится ограничение на минимальную длину комментария (например, 100 символов). Однако вместо содержательного текста пользователи начинают вводить бессмысленные наборы букв типа "asdfghjkl" или "фывафыва". Разберем, какими программными методами можно определить, является ли введенная строка осмысленным текстом или просто «мусором».

Метод 1: Использование механизма склонения слов

Проанализируем один из самых оригинальных и эффективных внутренних способов 1С. Суть метода заключается в том, что стандартные функции склонения (например, входящие в состав БСП или использующие внешние компоненты) работают со словарями. Если слово является «реальным», система сможет изменить его форму. Если же введена «абракадабра», функция склонения, как правило, вернет исходную строку без изменений.

Рассмотрим алгоритм реализации: мы берем каждое слово из введенного текста и пытаемся получить его форму в родительном падеже. Если после попытки склонения 95% слов остались неизменными, с высокой долей вероятности перед нами бессвязный набор символов. Посмотрим на пример логики:


// Пример логики проверки через склонение
Функция ТекстЯвляетсяОсмысленным(Знач ИсхТекст)
    МассивСлов = СтрРазделить(ИсхТекст, " ,.-!?", Ложь);
    СчетчикСклоняемых = 0;
    
    Для Каждого Слово Из МассивСлов Цикл
        Если СтрДлина(Слово) < 3 Тогда
            Продолжить;
        КонецЕсли;
        
        // Используем стандартный механизм склонения (например, из БСП)
        РезультатСклонения = СклонениеФИО.Просклонять(Слово, 2); // 2 - родительный падеж
        
        Если ВРег(Слово) <> ВРег(РезультатСклонения) Тогда
            СчетчикСклоняемых = СчетчикСклоняемых + 1;
        КонецЕсли;
    КонецЦикла;
    
    // Если склоняемых слов меньше определенного порога - это белиберда
    Возврат СчетчикСклоняемых > (МассивСлов.Количество() * 0.2); 
КонецФункции

Метод 2: Контроль количества слов и словарь «заполнителей»

Простая проверка на длину строки в символах легко обходится. Гораздо эффективнее контролировать минимальное количество слов. Выясним причину: написать осмысленное предложение из 5–7 слов сложнее, чем просто зажать одну клавишу. Дополнительно следует вести словарь «заполнителей» — список слов, которые сотрудники используют для обхода проверки (например, «нет комментария», «заполню позже», «нормально»).

Разберем по шагам реализацию данного подхода:

  1. Разбиваем введенную строку в массив, используя пробел как разделитель.
  2. Очищаем массив от пустых строк и коротких предлогов.
  3. Сверяем оставшиеся слова со списком запрещенных «заполнителей».
  4. Если количество уникальных значимых слов меньше установленного порога (например, 5 слов), блокируем запись документа.

Метод 3: Интеграция с внешними сервисами проверки правописания

Наиболее надежным, хотя и требующим интернет-соединения, способом является использование API, таких как Яндекс.Спеллер. Эти сервисы не только проверяют орфографию, но и могут возвращать количество ошибок в тексте. Проанализируем ситуацию: если в тексте из 100 символов количество ошибок превышает 50%, это явный признак того, что текст не несет смысла.

Использование HTTPСоединение позволяет отправить запрос к API и получить JSON с результатами проверки. Если массив найденных ошибок слишком велик, система выдает предупреждение пользователю.

Метод 4: Статистический анализ символов и энтропия

Человеческая речь имеет определенную статистическую структуру. В русском языке гласные и согласные чередуются, а распределение букв неравномерно. Посмотрим на методы статистической оценки:

  1. Соотношение гласных и согласных: В нормальном тексте гласных обычно около 40%. Если в строке из 100 символов всего 2-3 гласные, это гарантированный «мусор».
  2. Анализ биграмм: Существуют невозможные сочетания букв (например, «ьы», «щц», «чй»). Можно составить таблицу запрещенных пар символов. Если в слове встречается 2 и более таких сочетания — это не опечатка, а случайный набор знаков.
  3. Повторяющиеся фрагменты: С помощью регулярных выражений или простого перебора проанализируем текст на наличие повторяющихся подряд символов ("ааааа") или групп символов ("нормально нормально нормально").

Метод 5: Анализ паттернов клавиатуры

Ленивые пользователи часто вводят символы, которые расположены рядом на физической клавиатуре. Рассмотрим подробнее, как это отследить. Программа может содержать массивы строк, представляющих ряды клавиш: "йцукенгшщз", "asdfghjkl", "12345678". Если введенная пользователем подстрока длиной более 5-6 символов полностью совпадает с последовательностью клавиш (в прямом или обратном порядке), такой ввод следует признать некорректным.

Метод 6: UX-подход и анализ времени ввода

Осмысленный текст длиной 100 символов человек печатает в среднем от 10 до 20 секунд. Если 100 символов появились в поле ввода мгновенно (менее чем за 1 секунду), значит, был использован Ctrl+V (вставка скопированного текста) или зажата клавиша. Выясним, как это применить в 1С: в формах можно отслеживать события начала изменения текста и окончания. Разница во времени между этими событиями может служить косвенным признаком качества ввода.

Важный момент: не стоит полагаться только на один метод. Наилучший результат дает комбинация:

  1. Проверка на минимальное количество слов (не менее 5).
  2. Проверка соотношения гласных/согласных (не менее 20% гласных).
  3. Запрет длинных последовательностей одинаковых символов.
  4. Проверка хотя бы нескольких слов через механизм склонения.

Такой комплексный фильтр заставит даже самого ленивого сотрудника написать хотя бы одно короткое, но осмысленное предложение по сути дела.

← На главную