Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
tech:customer:rsv:install [2025/11/21 10:02]
dmitry_kalashnikov [Проверка работы]
tech:customer:rsv:install [2025/11/21 10:47] (текущий)
dmitry_kalashnikov [Инструкция по установке Модуля проверки]
Строка 1: Строка 1:
 ====== Инструкция по установке Модуля проверки ====== ====== Инструкция по установке Модуля проверки ======
  
-Создано тестовое приложение в виде server.js-файла, который запускается на Node.js как веб-сервер. +Модуль проверки представляет собой приложение в виде server.js-файла, который запускается на Node.js как веб-сервер.  
 Исходный код находится в репозитории: https://git.hitsoft-it.com/e-dictation/rsv  Исходный код находится в репозитории: https://git.hitsoft-it.com/e-dictation/rsv 
  
Строка 65: Строка 66:
 Полный цикл установки проверен на чистой системе Ubuntu 22.04.2 LTS, в которую был установлен только docker и его компоненты. Полный цикл установки проверен на чистой системе Ubuntu 22.04.2 LTS, в которую был установлен только docker и его компоненты.
 </note> </note>
-===== Проверка работы =====+===== Программный интерфейс и параметры =====
  
 +Адрес порта задаётся в конфигурации модуля при установке. Модуль проверки имеет точку входа через вызов функции ''calcResult''.
  
-Создано тестовое приложение в виде server.js-файла, который запускается на Node.js как веб-сервер по адресу ''0.0.0.0:8080'', и реализует метод ''/calcResult'', который принимает три параметра:\\ +POST http://localhost:8980/calcResult \\ 
-''dictId'' — строка, \\ +Content-type: ''application/json''\\
-''userId'' — строка, \\ +
-''text'' — строка.\\+
  
-При заданных параметрах сервер вернёт HTTP-код 200 и фиксированный (отладочный) результат в виде JSON.+Тело запроса JSON: 
 +<code javascript> 
 +{  
 +  dictId: string, //идентификатор диктанта для выбора соответствующего скрипта проверки;  
 +  dictSubId: string, //идентификатор подверсии диктанта для выбора соответствующего скрипта проверки;  
 +  userId: string, //идентификатор пользователя, написавшего текст (для логирования); 
 +  text: string, //текст диктанта, который написал пользователь; 
 +  returnStats: boolean //флаг возврата аналитических данных; 
 +
 +</code> 
 + 
 +Ответ: 
 +<code javascript> 
 +
 +  userId: string, //внешний идентификатор пользователя; 
 +  skipped: boolean, // флаг пропуска проверки; 
 +  skipDetails:
 +            reason: string, //причина пропуска, приоритет по порядку: textSizePercent, obsceneWords, penaltyErrors 
 +textSizePercent: float, // процент объёма входного текста от текста диктанта; 
 +obsceneWords: string[], //список найденных слов из словаря; 
 +penaltyErrors: int //число штрафных ошибок; 
 +          }, 
 +  errors: { 
 +  orfo: int, // число орфографических ошибок; 
 +  punct: int, //число пунктуационных ошибок; 
 +  typo: int //число опечаток; 
 +
 +  stats: // массив с аналитической статистикой, передаётся, если в вызове returnStats был true; 
 +  { 
 +    name: string, // имя столбца, например var_id или word1_orph1_rule33; 
 +    value: string // значение в этом столбце; 
 +   }[] 
 +
 +</code> 
 + 
 +===== Подмодуль фильтрации =====
  
-Сервер может принимать как GET-запросы с параметрами в URL-е, так и POST-запросы с параметрами, закодированными в форматах multipart/form-data, application/x-www-form-urlencoded или JSON-объекта.+Подмодуль фильтрации текстов включает в себя следующие функции:
  
-Если какой-то параметр пропущен, сервер выдаст ошибку.+  * Фильтрация текстов по признаку объема (текст отличается от текста в задании, меньше/больше/другой) не более чем на 20% слов. Причина фильтрации и процент логируется. Текстовое задание, прошедшее фильтрацию, передаётся далее подмодулю проверки текстовых заданий
 +  * Предобработка текста на аберрантное поведение (в тексте нет обсценной лексики, частей HTML разметки). Предобработка проверки текстового задания осуществляется функциями на поиск слов из заранее заданного словаря обсценной лексики. Если одно или несколько слов найдены, то выставляется соответствующий флаг пропуска проверки с причиной ''obsceneWords''. Текстовое задание далее не проверяется на ошибкипроверка останавливается. 
 +  * После проверки каждого текстового задания на выходе выдаётся файл в формате JSON, содержащий следующие данные:  
 +      * флаг пропуска проверки (параметр ''skipped''),  
 +      * причина пропуска, параметр reason принимает одно из значений причины фильтрации: ''textSizePercent'', ''obsceneWords'', ''penaltyErrors'',  
 +      * процент соответствия объёма текста, написанного респондентом, от текста задания (параметр ''textSizePercent''),  
 +      * список найденных стоп-слов из словаря обсценной лексики (параметр ''obsceneWord''), предоставленного Заказчиком, число штрафных ошибок в текстовом задании (параметр ''penaltyErrors'').
  
 ===== Пример приложения ===== ===== Пример приложения =====
 +
 +Ниже указан javascript-код, который сканирует подкаталог''texts'' с текстами написанных диктантов, отправляет каждый на проверку и считает среднюю скорость обработку файла.
  
 <code javascript> <code javascript>
Строка 110: Строка 153:
       const start = process.hrtime();       const start = process.hrtime();
  
-      // POST-запрос на сервер с содержимым файла и метаданными+      // POST-запрос на сервер с содержимым файла и параметрами
       request.post(       request.post(
           url,           url,
Строка 153: Строка 196:
 console.log(global.txtFiles) console.log(global.txtFiles)
 </code> </code>
 +
  • /opt/bitnami/dokuwiki/data/attic/tech/customer/rsv/install.1763719377.txt.gz
  • Последнее изменение: 2025/11/21 10:02
  • dmitry_kalashnikov