Мы хотим реализовать плагин для браузера, занимающийся анализом поведения пользователя, находящегося за компьютером. Мы будем собирать данные из браузера для каждой web-страницы, так и для переходов по сайтам в целом, и с некоторым периодом обновлять модель, описывающее поведение пользователя.
1. Создание плагина на google chrome, собирающего данные в формате json о поведении пользователя в сети [x]
2. Связь сервера с клиентом, посредством python скрипта. Данные полученные в двух предыдущих пунктах будут в формате json отправлены на сервер и сам сервер будет заниматься распределением данных по БД и прочим
- Python
- JS, HTML, CSS
- PostgreSQL
1. Google chrome плагинами будет в основном будет заниматься Матвей. Вытаскивание данных из браузера будем при помощи JS. Рассмотрев информацию с данной страницы, мы выделили несколько ключевых паттернов поведения пользователя(в скобках указано расположение данной информации в терминологии общей для всех расширений в браузерах):
- Координаты, скорость и ускорение мыши (есть RAW данные, нужна обработка)(content_script)
- Скорость печати, горячих клавиши (есть RAW данные, нужна обработка)(content_script)
- [-] Исправления в печати(content_script)
- [-] Навигация по сайту (через кнопки или с помощью колеса мыши)(content_script)
- [-] Размер окна, скорость листания страниц (background)
- [-] Количество открытых ссылок, количество закладок (background,alarm)
- Время проводимое на конкретных страницах сайта(content_script)
- [-] Даблклик на объект(content_script)
- [-] Количество запросов (background) (Можно получить из RAW данных)
- [-] Выделение текста, например, при чтении некоторым людям бывает удобно выделить мышкой тот текст, который им наиболее интересен и время, которое он был выделен(content_script)
2. Клиент серверная часть. На сервере будет работать python скрипт, который будет распараллеливать поступления информации.
База данных будет хранить в себе transition matrix и emission matrix необходимые для марковских цепей. Кроме того там будут таблицы users и webpages связанные primary key, подробнее о структуре базы данных можно почитать в sql
4. Проанализировав данные разных пользователей, мы пришли к двум выводам: во-первых, самое важное - это переходы между страницами, а, во-вторых, обычные аглоритмы машинного обучения, в которых есть обучающая выборка (то есть данные как нашего пользователя, так и некоторых других людей), нам не подходят. Выбор был сделан в пользу марковских цепей со скрытыми состояниями, подробнее о которых можно почитать в разделе analysis/markov_chain/Theory
Пока расширение не появилось в сети для общего пользования и сервер работает только локально.
- Склонировать репозиторий себе на компьютер.
- Установить браузер Google Chrome.
- Зайти на
chrome:\\extensions
и активировать режим разработчика. - Нажать на "Загрузить распакованное расширение" и выбрать папку
chrome_extension
из скачанного репозитрия.
Если все сделано правильно , на данном этапе в верхнем меню должна появиться желтая кошка (временный логотип расширения).
- Перейти в
Python_Project/server_data_tmp
. - Установить виртуальное окружение (необязательно).
- Поставить необходимые библиотеки руками через
pip3 install <name_of_module>
. Возможны проблемы с установкой некоторых библиотек, но для успешной работы необходимо поставитьflask
,flask_jsonrpc
,config
,pandas
,numpy
,asyncio
,networks
,matplotlib
,pprint
. Также чтобы работал модульpsycopg2
необходимо установить следущие билиотеки:PyPI
иpsycopg2-binary
.
- файл
personal_constants.py
: добавить свой фрагмент кода с данными пользователя и базы данных. - файл
config.py
: в классе Path добавить свою переменную и путь до Python_Project, изменить значение переменной paths (примерно 27 строка), в конце файла создать свой класс с данными пользователя, базы данных и пути до Python_Project. - файл
__init__.py
: изменить название класса (примерно 11 строчка). - файл
local_server.py
: изменить название класса (примерно 10 строчка). - файл
HMM_server.py
: изменить аргумент функции для переменной paths (примерно 13 строчка).
- Выполнить команду
python3 app/HMM_server.py
. Если ничего не выводится в консоль, то сервер работает. - Открыть ещё один терминал и, перейдя в папку
Python_Project/server_data_tmp
, выполнить в нём командуpython3 app/local_server.py
.
Если все сделано правильно, должны запуститься сервера и появиться сообщение содержащее строку Running on http://127.0.0.1:5000/
- Кликнуть на значок расширения в верхней строке браузера и запустить его (Enable) (При повторном наведении должна появится кнопка Disable).
- Обновить страницу.
Теперь расширение и сервера запущены. Для поступления данных на сервер достаточно зайти в браузер Google Chrome и продолжить пользоваться им как обычно. Чтобы остановить поступление данных нужно прервать процесс серверов в двух терминалах. Пока запросы не оптимизированы и едят достаточно много памяти (~0.5 Мб в минуту), поэтому советую пользоваться расширением не более 5-7 минут.
Чтобы получить доступ к сервеу необходимо обладать закрытым ключем, получить его можно, написав мне или Матвею