Мы хотим реализовать плагин для браузера, занимающийся анализом поведения пользователя, находящегося за компьютером. Мы будем собирать данные из браузера для каждой 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
. - Установить виртуальное окружение (необязательно).
- Поставить необходимые библиотеки из файла
requirments.txt
либо через командуpip3 install -r requirments.txt
, либо руками черезpip3 install <name_of_module>
. Возможны проблемы с установкой некоторых библиотек, но для успешной работы необходимо поставитьflask
иflask_jsonrpc
. - Выполнить команду
python3 app/local_server.py
.
Если все сделано правильно, должен запуститься сервер и появиться сообщение содержащее строку Running on http://127.0.0.1:5000/
. Теперь сервер запущен по указанному адресу, и расширение должно начать отправлять данные в файл Python_Project/server_data_tmp/app/data_tmp.json
. Теперь достаточно зайти в браузер Google Chrome и продолжить пользоваться им как обычно. Чтобы остановить поступление данных достаточно прервать процесс сервера в терминале. Пока запросы не оптимизированы и едят достаточно много памяти (~0.5 Мб в минуту), поэтому советую пользоваться расширением не более 5-7 минут.
Чтобы получить доступ к сервеу необходимо обладать закрытым ключем, получить его можно, написав мне или Матвею