Разработка серверной части системы для лингвистических исследований

Жанровые сигналы – характерные шаблоны, появляющиеся в текстах определенного жанра. Описание контроллеров серверной части программного приложения. Использование дискового хранилища - один из наиболее распространенных способов хранения информации.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 19.08.2020
Размер файла 4,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Для простоты реализации парсингXML, полученных от GATE, выполняется в два прохода: первый проход парсер работает с TextHandler, после чего из исходного файла считывается текстовые данные (размещены в особых узлах). Второй проход осуществляется с помощью AnnotationHandler, и он извлекает аннотации. В будущем возможно объединение объектов Handler для ускорения парсинга, но на данный момент это некритично.

Пример XML-файла, создаваемого GATE

<?xmlversion='1.0' encoding='UTF-8'?>

<GateDocumentversion="3">

<!-- Признаки документа, не используются -->

<GateDocumentFeatures>

<Feature>...</Feature>

...

</GateDocumentFeatures>

<!-- Далеерасполагаетсятекстспронумерованнымиузлами -->

<TextWithNodes>

<Nodeid="0"/>This

<Nodeid="4"/>

<Nodeid="5"/>is

...

</TextWithNodes>

<!-- Далее располагается набор аннотаций, привязанных к узлам текста -->

<AnnotationSet>

<AnnotationId="0"Type="Token"StartNode="0"EndNode="4">

<Feature>...</Feature>

...

</Annotation>

...

</AnnotationSet>

</GateDocument>

SAX-парсер не учитывает вложенность, но здесь она оказывается не нужна, так как в XML-файле, генерируемомGATE, узлы, содержащие текст и аннотации являются деревом с глубиной 1. Этот факт можно наблюдать в листинге выше (см. листинг3.2). При считывании из файла текстовые узлы создаются с сохранением поля «id», а узлы аннотаций - с полями «id», «type», «startnode», «endnode». Узел «GateDocumentFeatures»содержит информацию о документе в целом, на данный момент он целиком игнорируется.

После обработки XML-файла создается новый экземпляр класса Text, который является деревом с глубиной 1, и каждый лист представляет собой экземпляр класса TextNode. В листе хранится строка с текстом - это может быть слово, фраза, предложение или целый параграф - зависит это от специфики обрабатывающего маркера.

Помимо текста, каждый лист хранит массив аннотаций, каждая из которых представляет собой объект, хранящий название маркера GATE, который произвел данную аннотацию, и строку вида «color-n», где «n» -натуральное число, присвоенное каждому типу аннотаций парсером в порядке встречи этой аннотации в тексте.

Каждый лист дерева имеет метод для преобразования в HTML-элемент, который по сути является элементом«div» с классом, установленным в соответствие со вышеописанной строкой вида «color-n». Создание цветного текста происходит на сервере в методе класса TextNode, где «annotations» представляют собой массив строк вида «color-n» (см. листинг 3.3). На клиентской стороне такие элементы подсвечиваются различными цветами в зависимости от установок, записанных в файле «annotations.css».

Построение аннотированного текста

publicvoidappendAsHtml(StringBuildersb) {

sb.append("<div class=\"colorized-text-node");

for (var annotation : annotations) {

sb.append(" ");

sb.append(annotation.toLowerCase());

}

sb.append("\">");

sb.append(text);

sb.append("</div>");

}

Для вывода статистики по корпусам был разработан классStatistics, который содержит в себе множество StatisticsNode. Каждый такой узел содержит имя аннотации и количество встреч этой аннотации в корпусе. Данная статистика будет отсылаться на микросервис для визуализации статистики, который находится в разработке другим участником Научно-исследовательской лаборатории.

В процессе функционирования сервера непременно могут возникнуть специфические исключительные ситуации, которые, как правило, нельзя описать стандартными исключениями. Для обработки таких ситуаций были разработаны собственные классы исключений (см. таблица 3.3).

Таблица 3.3 - Описание классов пользовательских исключений

Название

Описание исключительной ситуации

CorpusNotFound

Исключение возникает в случае, если корпус не найден. Самый частый пример такого случая - когда клиентская сторона передает idкорпуса, который не существует либо был уже удален.

CredentialsNotMatch

При авторизации пользователь может ввести несуществующий на сервере логин или пароль (умышленно или неумышленно). В таком случае ему будет предложено ввести данные повторно.

DocumentNotCreated

Возникает, если по каким-то причинам документ не удалось создать. Например, в процессе работы библиотеки GATEможет возникнуть исключение. В таком случае документ не удастся создать, так как не будет предоставлена XML-разметка текста.

TextNotPresent

Это исключение выбрасывается, в случае если документ ссылается на удаленный или не созданный текст.

UserAlreadyExists

При регистрации пользователя может оказаться, что логин занят. В таком случае исключение будет перехвачено, и пользователю будет сообщено, что логин занят.

В названии всех классов опущен суффикс Exception для краткости. Этот суффикс считается хорошим тоном при именовании классов исключений в Java, как и во многих других языках.

Клиентская часть разработана с применением HTML5, CSS и JS без использования фреймворков. В ходе работы был разработан свой «микро-фреймворк», с помощью которого выполняются все нужные операции на стороне клиента. Обмен данными между сервером и клиентской частью производится по протоколу HTTP, в большинстве случаев с помощью JSON, за исключением GET-запросов, которые не позволяют иметь тело запроса. В этом случае информация кодируется прямо в адресной строке.

Документы HTML, получаемые клиентской частью, обрабатываются на сервере Thymeleaf, который может добавлять данные как в HTML, так и в JSсценарии, а также могут вставляться шаблоны из других документов, что обеспечивает активное переиспользование кода. Далее будут подробно рассмотрены каждый из созданных HTML-документов.

В-первых, разметка начальной страницы хранится в файле index.html (см. рисунок 3.5). С этой страницы можно перейти на другие страницы портала, а также пройти регистрацию или авторизацию. После авторизации пользователю будут доступны его личные корпуса, а также те корпуса, которые он может просматривать по своему уровню привилегий.

Рисунок 3.5 - Загруженная с сервера начальная страница

С главной страницы можно попасть на страницу регистрации нового пользователя - registration.html. На этой странице пользователь вводит логин, придумывает пароль, далее его подтверждает. Если созданный логин еще не использован в системе, то пользователь регистрируется и перенаправляется на главную страницу.(см. рисунок 3.6).

Рисунок 3.6 - Страница регистрации пользователя

В случае, если пользователь уже зарегистрирован, или же сразу после регистрации, он может перейти с главной страницы на страницу авторизации login.html (см. рисунок 3.7). Подобно странице регистрации, пользователь здесь вводит свой логин и пароль (подтверждение в этот раз уже не требуется). Если система находит человека с таким логином и паролем в базе, то пользователь считается авторизованным, и его перенаправляют на главную страницу.

Рисунок 3.7 - страница авторизации пользователя

Следующая страница - corpora.html - содержит разметку для отображения корпусов текстов в системе (см. рисунок 3.8). Корпуса загружаются с сервера динамически, следовательно, обновление страницы не понадобится при добавлении нового корпуса. Само добавление происходит с помощью модального окна, которое изначально скрыто и может быть открыто с помощью сценариев. В этом окне нужно указать название корпуса и нажать на кнопку сохранения. Для динамического создания элементов в списке корпусов создана разметка, которая предполагает, что по нажатию на название корпуса произойдет переход на страницу документов.

Рисунок 3.8 - Загруженная с сервера страница корпусов

Для отображения документов используется область на странице корпусов, которая имеет динамический список документов, поле для аннотированного текста, которое активируется по нажатии на документ. Справа от него появляется панель, на которой отображен динамический список аннотаций, каждая из которых может быть отключена по нажатии на флажок (см. рисунок 3.9). Для загрузки документов создано модальное окно, которое, по аналогии с модальным окном на странице корпусов, является скрытым изначально. В этом модальном окне пользователь указывает/переносит документы для загрузки, и далее нажимает на кнопку сохранения.

Рисунок 3.9 - Загруженная с сервера страница документов

Так как файлы разметки были выполнены специально для их последующей обработки в Thymeleaf, они содержат нестандартные атрибуты, однако это не мешает им быть отображенными в браузере как обычный HTML-файл. Согласно спецификации HTML5, нестандартные атрибуты должны быть проигнорированы браузерами. В страницах, загруженных таким образом, не будет контента, так как большая часть его загружается динамически с помощью скриптов. Однако такое использование разработанных HTML-файлов не предполагается, так как ожидается их предварительная обработка на сервере, и лишь после этого представление пользователю.

Таблицы стилей

Разработаны таблицы стилей для основных страниц портала, а также стили, указывающие цвета при отображении текста с аннотациями. Для классов аннотаций в файле стилей выделены особые пронумерованные наименования, которые генерируются сервером при обработке входящего документа. В поле отображения текста отдельные аннотированные единицы отображаются выделенным для них цветом. Была предпринята попытка подобрать нейтральные и довольно контрастные цвета для улучшения различимости их в тексте.В отдельный файл вынесены стили для страниц авторизации и регистрации, так как дизайн страниц схож, и многое оттуда не используется на других страницах.

Сценарии страниц

В учебных целях не было использовано никаких JS-фреймворков; фактически, был написан свой собственный «микро-фреймворк», обеспечивающий все необходимые порталу функции.

Для каждой HTML-страницы выделен свой файл со сценарием, в каждой из которых присутствует объект представления, унаследованный от базового View. Внутри этих объектов прописаны все взаимодействия внутри страницы. Некоторые из элементов страницы генерируются на клиентской стороне, например, список документов корпуса загружается динамически с помощью собственной универсальной функции для выполнения HTTP-запросов.

Так как коммуникация с сервером происходит при помощи протокола HTTP, изначально были реализованы функции для проведения таких запросов с помощью встроенного в JSAPIXHttpRequest. Обертка над этим APIудобна, лаконична, и может использоваться в асинхронном коде, так как запрос происходит с помощью создания объекта Promise, который содержит отложенный результат. Также созданные функции позволяют регулировать формат отправки/получения, по умолчанию установленный в JSON для всего, кроме формата отправки для запросов GET - эти запросы передают параметры в адресной строке в специальном виде URL-encoded.

В задачах отображения модальных окон, а также для создания динамического списка элемента было принято решение использовать шаблоны этих элементов, встроенные в HTML-разметку (скрытые изначально). Для эффективного управления динамическими шаблонами была создана функция traverse, которая выполняет обход в глубину от указанного корня дерева DOM (например, это корневой элемент модального окна или элемента в динамическом списке). По прохождении каждого узла функция запоминает элементы, сохраняя их в словарь, в котором ключами являются: названия классов элементов, idэлементов, а также атрибут nameдля элементов формы.

Для облегчения работы и понижения количества ошибок при работе с null/undefined объектами в JavaScript был разработан класс Optional по образу и подобию такового в Java. Класс инкапсулирует возможно пустой объект и предоставляет методы для работы с ним при его наличии или же отсутствии. Основные методы данного класса приведены ниже (см. таблица 3.4).

Таблица 3.4 - Основные методы класса Optional

Название

Параметры

Возвращаемое значение

Примечания

конструктор(значение)

значение

<объект>

Создает объект Optionalиз потенциально отсутствующего объекта - значения nullи undefinedпризнаются отсутствием объекта, и Optionalсоздается пустым.

get value

Значение, если присутствует, иначе исключение

Возвращает значение, инкапсулируемое экземпляром класса Optional, если же Optional пустой - генерируется исключение MissingValueError.

get present

Содержит ли Optional значение?

Возвращает «истина», если объект Optionalбыл инициализирован со значением, отличным от nullи undefined.

toString()

other

Строковое представление Optional

Конвертирует объект Optionalв строку, в случае если значение отсутствует, то возвращается параметр other.

filter

predicate

Тот же самый Optional, если predicate возвращает «истина», иначе пустой Optional

Заданный предикат вызывается со значением внутри Optional, в случае если предикат возвращает «ложь», метод возвращает пустой Optional.

map

mapper

Обработанный mapper результат

Функция mapperпринимает один аргумент - внутреннее значение объекта Optional, а возвращает новое значение, которые потом оборачивается в Optional. Таким образом, результатом mapperдолжен быть непустой объект. В случае, если Optional пуст, возвращается пустой Optional.

flatMap

mapper

Обработанный mapper результат

Функция mapperпринимает один аргумент - внутреннее значение объекта Optional, а возвращает новый экземпляр Optional, который также может быть пустым.

ifPresent

consumer

В функции consumerвыполняется обработка значения Optional. Consumerвызывается только в случае, если Optional не пуст.

orElse

other

Если Optional не пуст - значение, иначе other

Возвращает значение Optional в случае, если он не пустой. В случае, если объект отсутствует в экземпляре Optional, то метод возвращает объектother.

orElseGet

supplier

Если Optional не пуст - значение, иначе результат вызова supplier

Возвращает значение Optional в случае, если он не пустой. Иначе возвращает результат вызова функции supplierбез параметров.

В целях экономии места на страницах вместо статических форм используются модальные окна, разворачиваемые на весь экран. В изначальном состоянии их разметка располагается в HTML-файлах с атрибутом hidden, который выключает отображение этих элементов, и они не занимают места на экране. Для отображения модального окна они должны быть указаны в JavaScript-коде при инициализации классов отображения, иначе окно останется невидимым для пользователя.

Разработанный класс Modalпозволяет показывать/скрывать модальное окно - во время показа модальное окно занимает все пользовательское пространство, а также динамически анализировать разметку, находить в ней поля формы для последующих действий по нажатию кнопки «Отправить». Пример модального окна, в данном случае, для загрузки документов, представлен ниже (см. рисунок 3.10).

Рисунок 3.10 - Пример модального окна для создания документов

В разметке модального окна есть несколько составляющих частей, которые распознаются JS-кодом динамически. Во-первых, это контейнер модального окна, который, по сути, занимает весь экран.Благодаря этому нажатия на элементы «под» модальным окном перехватываются, а также есть возможность наложить визуальный эффект затемнения на задний фон. Далее, разметка, которая находится в самом модальном окне, вставляется во внутренний контейнер, который и отображается пользователю.

В программной системе есть несколько видов сущностей, которые целесообразно подгружать динамически на клиентскую сторону: корпуса, документы, а также аннотации. Для этого был разработан класс ItemList, который строит списки сущностей на основе загружаемых с сервера данных.Для отображения сущностей класс использует предварительно созданные шаблоны, которые располагаются на исходной HTML_странице (подобно вышеописанному случаю с модальными окнами). Класс анализирует шаблонную разметку, клонирует ее и снабжает необходимыми обработчиками событий, например, на удаление элемента из списка (см. рисунок 3.11).

Рисунок 3.11 - Пример списка ItemList

Далее будут подробно рассмотрены созданные во время разработки файлы со скриптами. Первым был создан файл «main.js». В нем находятся глобально используемые функции для работы с запросами, обхода DOM-дерева, а также классы Optional для работы с потенциально отсутствующими объектами, Modal, инкапсулирующий логику работы с модальными окнами,ItemList, который определяет механизм работы с динамическим списком элементом, класс View, являющийся базовым для всех классов представления и содержащий некоторые полезные методы для работы с динамическими списками внутри представлений.

Стартовая страница использует «index.js», в котором реализована логика представления для начальной страницы. Здесь проходит регистрация или авторизация пользователя, а также переход на другие страницы портала.

Файл corpora.jsотвечает за логику представления для страницы, отображающей корпусы. В файле содержится расширение классаView, в котором определяются взаимодействия пользователя с элементами страницы, а также регистрируется модальное окно создания корпуса. Внутри класса представления прописаны методы создания нового корпуса, получения списка корпусов с сервера, а также удаления корпуса.

Следующий файл, который был создан - «document.js» - в нем реализована логика представления для страницы отображения документов. Этот файл намного больше, чем предыдущий файл, главным образом из-за того, что здесь также происходит обращение к API, работающему с текстами на сервере. Именно на этой странице происходит отображение аннотированного текста. Здесь же можно загрузить новые документы, посмотреть список документов по корпусу, а также удалить документы из корпуса. Отдельно были созданы методы для работы с аннотациями: их включения/отключения, при которой внутри текста меняется подсветка.

Отладка и тестирование

В ходе разработки были неоднократно встречены ошибки. В большинстве случаев встроенный отладчик IntelliJIDEAпомогал разрешить возникающие проблемы. Для мониторинга запросов, поступающих на сервис, был подключен модуль SpringActuator. Для отладки клиентской части был использован встроенный отладчик GoogleChrome, работа с порталом также осуществлялась с других браузеров: MozillaFirefox, Safari и MicrosoftEdge.

В проекте используется SpringBoot, который реализует архитектуру MVC и предоставляет возможность использовать юнит-тесты для MVC и создавать Mock-объекты. С использованием модуля SpringTestбыли созданы тесты для слоя контроллеров API(см. Приложение В).

Интерфейс приложения был протестирован с помощью разработанных сценариев тестирования (см. Приложение В). При тестировании также учитывалась специфика серверной части, так как и серверная часть, и клиентская была разработана мной лично. Усилия были направлены на полное тестирование интерфейса, чтобы по возможности протестировать все элементы на клиентской стороне.

Заключение

По результатам выполнения работы по анализу предметной области, проектированию, реализации и тестированию была разработана серверная часть портала для анализа академических текстов, а также клиентская часть в объеме, необходимом для тестирования функций, предоставляемых сервером.

В начале исследования был проведен анализ среди существующим решений по корпусным исследованиям, выбран способ хранения корпусов и прочих данных в рамках портала, а также проанализирована релевантная для исследования литература. Были выдвинуты требования к разработанной системе, которые впоследствии были объединены в техническое задание.

После этапа анализа было проведено проектирование системы, которые включило в себя проектирование сущностей базы данных, проектирование серверной части веб-приложения, а также проектирование клиентской части. С помощью MicrosoftVisioбыл спроектирован интерфейс, который впоследствии был реализован, хоть и в измененном и улучшенном в плане дизайна виде.

Финальной выполненной задачей стала реализация программной системы, где с помощью языка Javaи фреймворка SpringBootбыл реализована серверная часть портала, а с помощью HTML5, CSS 4 и JSбез применения фреймворков - клиентская часть. Портал является RESTfulвеб-сервисом, а это значит, что API, предоставляемое им и подробно описанное в главе, посвященной реализации программной системы, доступно для использования любому другому RESTfulвеб-сервису, например, разрабатываемому в рамках Научно-учебной лаборатории в НИУ ВШЭ_Пермь сервису для визуализации статистики по корпусам портала.

Система может регистрировать пользователей, после чего авторизованный пользователь может просматривать корпусы, доступные ему. Администратор портала имеет доступ к более широкому набору функций и может модифицировать любой из представленных на портале корпусов, а также модифицировать, удалять и отстранять пользователей от портала. Каждый корпус содержит в себе определенное количество документов, каждый из которых имеет название и размеченный с помощью библиотеки GATEтекст. Система может отображать размеченный текст в окне браузера, а также перечислять аннотации, которые встречаются в нем.

Для обеспечения динамичности страниц на клиентской стороне был реализован собственный «микро-фреймворк», с помощью которого без лишних зависимостей выполняются все стоящие перед клиентской частью задачи. Многие данные загружаются динамически - для этого были написаны функции для выполнения запросов без перезагрузки страницы.

Несмотря на то, что на данный момент система не может давать рекомендации пользователям по улучшению их академического письма, уже было заложено основание для последующего внедрения этой функции в портал. Система имеет инструменты для регистрации и авторизации пользователей. Пользователи могут создавать корпуса и добавлять в них документы, каждый из которых размечается порталом с помощью библиотеки GATE Embedded.Систему уже могут использовать в своей практике лингвисты, преподаватели, студенты, которые занимаются работой с англоязычными академическими текстами.

Так как работа Научно-учебной лаборатории не заканчивается, в будущем планируется улучить дизайн и эргономичность портала, а также объединить его с микросервисами, созданными другими участниками команды.

Литература

1. GATE General Architecture for Text Processing [Электронный ресурс]. URL: https://gate.ac.uk/ (дата обращения: 20.04.2020).

2. NLTKHomePage [Электронный ресурс]. URL: http://www.nltk.org/ (дата обращения: 20.04.2020).

3. AntConcHomePage [Электронный ресурс]. URL: https://www.laurenceanthony.net/software/antconc/ (дата обращения: 20.04.2020).

4. MongoDBDocumentation [Электронный ресурс]. URL: https://docs.mongodb.com/manual/core/document/ (дата обращения: 20.04.2020).

5. Lanin V., Strinyuk S., Shuchalova Y. Academic papers evaluation software // 2015 9th International Conference on Application of Information and Communication Technologies (AICT). - IEEE, 2015. - С. 506-510.

6. Rusinovci X. Teaching writing through process-genre based approach // US-China Education Review. - 2015. - Т. 5. - №. 10. - С. 699-705.

7. Al Badi I. A. H. Academic writing difficulties of ESL learners //The 2015 WEI International Academic Conference Proceedings. - 2015. - Т. 1. - №. 1. - С. 65_78.

8. Omizo R., Hart-Davidson W. Finding Genre Signals in Academic Writing // Journal of Writing Research. - 2016. - Т. 7. - №. 3.

9. Wu X., Mauranen A., Lei L. Syntactic complexity in English as a lingua franca academic writing // Journal of English for Academic Purposes. - 2020. - Т. 43. - С. 100798.

10. Miller J. The bottom line: Are idioms used in English academic speech and writing? // Journal of English for Academic Purposes. - 2020. - Т. 43. - С. 100810.

11. Liu Y. et al. Write-righter: an academic writing assistant system // Thirtieth AAAI Conference on Artificial Intelligence. - 2016.

12. Lee J. et al. Assisted nominalization for academic English writing //Proceedings of the Workshop on Intelligent Interactive Systems and Language Generation (2IS&NLG). - 2018. - С. 26-30.

13. Microsoft Visio Official Site [Электронный ресурс]. URL: https://www.microsoft.com/ru-ru/microsoft-365/visio/flowchart-software (дата обращения: 20.04.2020).

14. JetBrains Official Product Site [Электронный ресурс]. URL: https://www.jetbrains.com/ru-ru/idea/ (дата обращения: 20.04.2020).

15. Spring Boot Documentation [Электронный ресурс]. URL: https://spring.io/projects/spring-boot (дата обращения: 20.04.2020).

16. Thymeleaf Template Engine for Java [Электронный ресурс]. URL: https://www.thymeleaf.org/ (дата обращения: 20.04.2020).

17. ECMA International ECMAScript Standard [Электронный ресурс]. URL: https://www.ecma-international.org/publications/standards/Ecma-262.htm (дата обращения: 20.04.2020).

18. SpringDataDocumentation [Электронныйресурс]. URL: https://spring.io/projects/spring-data (дата обращения: 19.05.2020).

19. BSON Language Specification [Электронныйресурс]. URL: http://bsonspec.org/ (дата обращения: 21.04.2020).

20. Spring Initializr [Электронный ресурс]. URL: https://start.spring.io/ (дата обращения: 18.05.2020).

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.