Материал: Браузерное расширение для визуализации грамматики

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Содержимое файла-манифеста, описывающего конфигурацию расширения, будет подробно описано в следующем разделе. Общая структура разрабатываемого браузерного расширения показана на рис. 13:

Рис. 13. Общая структура разрабатываемого браузерного расширения.

Структура серверного API

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

Серверная часть отвечает за выполнение следующих функций:

Перевод и предоставление дополнительной информации о слове;

Добавление слова на изучение;

Хранение и просмотр истории слов, добавленных на изучение;

Хранение статистики по встречаемости слов в истории просматриваемых пользователем страниц для оценки важности слова в контексте текущего документа;

Выполнение алгоритма, выявляющего важные слова в контексте текущего документа.

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

Для организации работы механизма авторизации необходимо так же использование двух дополнительных микросервисов:- возвращает token провайдера профилей разработчика для последующей передачи в AWS Cognito;- получает token провайдера разработчика от предыдущего микросервиса, обменивается данными с AWS Cognito и возвращает ID профиля пользователя (identity id) и token, использующийся клиентом для подписи всех запросов к сервисам AWS.

Все микросервисы принимают на вход и возвращают данные в формате JSON. Далее будут описаны форматы входных и выходных данных каждой из функций.: входные данные показаны в табл. 2, выходные - в табл. 3; стуктура объектов Wordи Term, использующихся в описании данных показана в табл. 3 и табл. 4 соответственно; пример выходных данных функции в формате JSONпоказан на рис. 14.

Таблица 2

Входные данные функции TranslateWord

Параметр

Тип данных

Обязателен

По-умолчанию

Word

String

Да



Таблица 3

Выходные данные функции TranslateWord

Параметр

Тип данных

Обязателен

По-умолчанию

Words

Array[Word]

Да



Таблица 4

Структура объекта Word

Параметр

Тип данных

Обязателен

По-умолчанию

ForeignWord

String

Да


NativeWord

String

Да


PartOfSpeechId

String

Да


Terms

Array[Term]

Да



Таблица 5

Структура объекта Term

Параметр

Тип данных

Обязателен

По-умолчанию

Word

String

Да


Order

Number

Да


PartOfSpeechId

String

Да



Рис.14. Пример данных, возвращаемых функциейTranslateWord.

: входные данные показаны в табл. 6, в случае успеха возвращает null.

Таблица 6

Входные данные функции AddWord

Параметр

Тип данных

Обязателен

По-умолчанию

Word

Word

Да


: входные параметры отсутствуют, формат выходных данных указан в табл. 7.

Таблица 7

Выходные данные функции TranslateWord

Параметр

Тип данных

Обязателен

По-умолчанию

Words

Array[Word]

Да


TeachTfIdf: формат входных данных указан в табл. 8, в случае успеха возвращает null.

Таблица 8

Входные данные функции TeachTfIdf

Параметр

Тип данных

Обязателен

По-умолчанию

Urls

Array[String]

Да


IdentityId

String

Да


: формат входных данных указан в табл. 9, выходных - в табл. 10; структура объекта WeighedWordуказана в табл. 11, пример выходных данных функции приведен на рис. 15.

Таблица 9

Входные данные функции GetImportantWords

Параметр

Тип данных

Обязателен

По-умолчанию

Url

String

Да


Limit

Number

Нет

10


Таблица 10

Выходные данные функции GetImportantWords

Параметр

Тип данных

Обязателен

По-умолчанию

Words

Array[WeightedWord]

Да



Таблица 11

Структура объекта WeighedWord

Параметр

Тип данных

Обязателен

По-умолчанию

Word

String

Да


Tf

Number


Idf

Number

Да


TfIdf

Number

Да



Рис.15. Пример данных, возвращаемых функцией GetImportantWords.

: входные данные показаны в табл. 12, выходные - в табл. 13, коды ошибок, возвращаемых функцией показаны в табл. 14.

Таблица 12

Входные данные функции GetDeveloperIdentityToken

Параметр

Тип данных

Обязателен

По-умолчанию

Identifier

String

Да


AccountType

String

Да


Token

String

Да



Таблица 13

Выходные данные функции GetDeveloperIdentityToken

Параметр

Тип данных

Обязателен

По-умолчанию

Token

String

Да



Таблица 14

Коды ошибок функции GetDeveloperIdentityToken

Код ошибки

Описание

WRONG_SOCIAL_NETWORK_TOKEN

Переданный токен Facebook  неверен.

UNEXPECTED_NETWORK_RESPONSE

Ответ от Facebook не соответствует ожидаемому.

.: формат входных данных указан в табл. 15, выходных данных - в табл. 16

Таблица 15

Входные данные функции GetIdentityInfo

р

Тип данных

Обязателен

По-умолчанию

AuthToken

String

Да



Таблица 16

Выходные данные функции GetDeveloperIdentityToken

Параметр

Тип данных

Обязателен

По-умолчанию

IdentityId

String

Да


Token

String

Да



Для всех разрабатываемых функций характерен общий набор возвращаемых ошибок, указанный в табл. 17.

Таблица 17

Набор ошибок, возвращаемых всеми функциями

Код ошибки

Описание

NO_REQUIRED_PARAMETER

Один из обязательных параметров  не был передан функции.

PARAMETER_WRONG_TYPE

Один из параметров имеет не тот тип,  что указан в спецификации.

PARAMETER_WRONG_VALUE

Один из параметров имеет значение, не разрешенное спецификацией для данного параметра.


Структура хранения данных

браузерный расширение слово данные

Для хранения данных на сервере используется NoSQL база данных Amazon DynamoDB. Коллекция данных в DynamoDB представлена таблицей, хранящей некоторое количество записей. Запись состоит из одного или нескольких аттрибутов. Каждая запись должна иметь уникальный первичный ключ, который представляется с помощью одного из двух вариантов: [25]Key (hash key) - является значением, от которого СУБД берет хеш-функцию, определяющую раздел памяти, в котором хранится запись. В таблице не может быть двух записей с одинаковыми partition key.Key и Sort Key (range key) - является композитным первичным ключом, состоящим из Partition Key, описанного выше, и Sort Key, используемого для сортировки записей, имеющих одинаковый Partition Key. Несколько записей в таблице при использовании такого варианта первичного ключа могут иметь одинаковые значения Partition Key, но обязательно должны иметь разные Sort Key, т.е значение композитного первичного ключа так же должно быть уникально.

Для хранения данных, требующихся для реализации требуемого функционала были выделены следующие таблицы:- хранит информацию об истории добавленных на изучение слов, структура таблицы показана в табл. 18.

Таблица 18

Структура таблицы ExtensionWordsAdded

Название аттрибута

Тип данных


IdentityId

String

Partition Key

ForeignWord

String

Sort Key

CreatedAt

Number

Timestamp (ms)

Data

JSON Object (String)



В качестве Partition Key в данной таблице выступает IdentityId, являющийся уникальным идентификатором пользователя в системе AWS Cognito, использующейся для авторизации. Имея идентификатор пользователя и выбрав все записи в таблице по Partition Key, можно получить коллекцию слов, добавленных данным конкретным пользователем. Для обеспечения уникальности первичного ключа, в качестве Sort Key выступает иностранное слово. Остальная информация о переведенном слове хранится в поле Data как JSON объект той же структуры Word, которая возвращается серверным API при переводе слова, переведенный в строку.- хранит информацию о том, сколько раз в истории просмотренных страниц пользователя встретилось то или иное слово для алгоритма, оценивающего важность слова в контексте просматриваемого документа используя меру TF-IDF.

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

Таблица 19

Структура таблицы ExtensionWordsOccurences

Название аттрибута

Тип данных


IdentityId

String

Partition Key

Occurences

JSON Object (String)



В качестве Partition Key так же выступает IdentityId, что позволяет имея идентификатор пользователя выбрать из таблицы историю встреченных слов. Статистика по словам хранится как JSON объект, представленный в таблице строкой, как показано на рис. 16:

Рис. 16. Структура объекта, хранящего историю встречаемости слов.

В ключе TotalDocuments хранится общее количество документов, по которым собрана статистика. В объекте по ключу Occurences доступна собственно статистика по встречаемости слов в рассмотренных документах, где ключом выступает слово, а значением - количество документов, в которых встретилось данное слово. Таким образом, получив из базы данных данную информацию, становится возможным расчет IDF для конкретного слова, в то время как метрика TF рассчитывается без использования каких-либо исторических данных.

          Для хранения данных на клиенте используется локальное хранилище браузера вида «ключ-значение», структура данных показана в табл. 20.

Таблица 20

Структура данных, хранящихся в локальном хранилище браузера

Название аттрибута

Тип данных

authDeveloperIdentityToken

String

authFacebookUserInfo

JSON Object (String)

addedWords

JSON Object (String)

viewedWords

JSON Object (String)


В ключе authDeveloperIdentityToken хранится токен, полученный от сервера после авторизации пользователя, и использующися в механизме авторизации при перезагрузке расширения. Информация об авторизованном пользователе (имя и IDFacebook) доступна в ключе auth FacebookUserInfo.Информация о добавленных и просмотренных словах хранится как объект JSON, преобразованный в строку (так как localStorage поддерживает значения только строкового типа), и доступна в ключах addedWordsи viewedWords соответственно.

Структура используемого механизма авторизации

Для авторизации пользователей в разрабатываемом браузерном расширении используется сервис AWS Cognito, предоставляющий систему организации прав доступа ко всем сервисам облачной платформы Amazon Web Services, включая используемые в рамках данной работы сервисы Lambda и DynamoDB.