/** * Количественные оценочные данные */ interface ScoreResult { /** * количество ошибок */ errors: { /** * орфографических */ ORFO: number, /** * опечаток */ TYPO: number, /** * пунктуационных */ PUNCT: number }, /** * количество набранных баллов из 100 (в построении отчета не используется) */ score: number, /** * является ли текст похожим на текст диктанта, чтобы можно * было искать ошибки (если значение false, то скорее всего * количество ошибок будет нулевое) */ isTotalDict: boolean } /** * Основная модель результата проверки */ interface Model { /** * Уникальный id проверки, генерируется при каждом вызове алгоритма проверки */ checkId: string; /** * Текст заголовка диктанта, разбитый на параграфы, * если пользователь писал заголовок */ titles: Paragraph[], /** * Текст диктанта, разбитый на параграфы */ text: Paragraph[], /** * key-value объект со всеми допущенными ошибками. * Ключом является поле error из модели Text. */ errors: Errors, /** * Количественные оценки */ summary: Summary, /** * Версия алгоритма проверки */ version: string, /** * Является ли текст, введённый пользователем, похожим на текст диктанта. * Если нет, то поиск ошибок не проводится. */ isDictantText: boolean, /** * Список лексем с ошибками. Для построения отчёта не нужен. Нужен * для построения тепловой карты ошибок на текстах многих пользователей */ errorList: LexemeError[] } /** * простой массив "кусочков" текста */ type Paragraph = Text[] /** * Модель "кусочка" текста, для построения отчета */ interface Text { /** * Текст "кусочка" диктанта, написанный пользователем. Если на * этом "кусочке" пользователь не сделал ошибок, то остальных полей нет */ text: string, /** * Уникальный идентификатор ошибки, комбинация позиции и хеша ошибки */ id?: string, /** * Количественные показатели ошибок у данного "кусочка" текста */ counts?: ErrorCounts, /** * Идентификатор комплексной ошибки (может состоять из нескольких ошибок). * Ключ для key-value модели Errors */ error?: string, /** * Позиция в диктанте (с какой по какую лексему). * Для построения отчета не используется. */ position?: string | number } /** * Количество ошибок */ interface ErrorCounts { /** * Орфографических */ ORFO?: number, /** * Пунктуационные */ PUNCT?: number, /** * Опечатки */ TYPO?: number, /** * Неучтенные ошибки (не должно быть таких) */ UNEXPECTED?: number } /** * key-value контейнер ошибок, где ключом является поле error ошибки из модели Text */ interface Errors { /** * На фрагмент текста может быть несколько ошибок. Ошибки разделены по * правилам (и это значит, что количество элементов этого массива может * не совпадать с суммой ORFO + PUNCT + TYPO) */ [key: string]: Error[]; } /** * Модель, содержащая количественные оценки результата проверки */ interface Summary { /** * Количество ошибок */ counts: ErrorCounts, /** * Сколько баллов набрано из 100 возможных * (для построения отчёта не используется) */ score: number } /** * Модель ошибки, с объяснением через правила русского языка */ interface Error { /** * идентификатор ошибки из модели разметки (для построения отчёта не нужен) */ id?: string, /** * Тип ошибки ORFO, PUNCT или TYPO */ kind: string, /** * html размеченная ошибка (ошибочная часть выделена тегами ) */ title: string, /** * Html объясенение ошибки, которое показывается в аннотации к ошибке */ description: string } /** * Модель используется для построения тепловой карты ошибок * Для отчёта не нужна. */ interface LexemeError { /** * id ошибки позиция в диктанте + hash от написанного текста, * для группировки одинаковых ошибок у разных пользователей */ id: string, /** * Текст пользователя */ text: string, /** * Ссылка на ошибку изначальной модель разметки в Учительской диктантов */ errorId: string, /** * Тип ошибки ORFO, PUNCT или TYPO */ kind: string, /** * Идентификатор начальной лексемы в модели разметки */ lexemeStartId: string, /** * Идентификатор конечной лексемы в модели разметки */ lexemeEndId: string, /** * Ошибка не в лексемах, а вставлена между лексем диктанта */ betweenStartEnd: boolean }