Содержимое файла-манифеста, описывающего
конфигурацию расширения, будет подробно описано в следующем разделе. Общая
структура разрабатываемого браузерного расширения показана на рис. 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.