В домашнем задании вам нужно написать программу, которая обращается к открытому (то есть такому, чтобы для просмотра контента не нужна была авторизация) сообществу Вконтакте, выкачивает посты со стены и комментарии к ним. Сообщество можно выбрать любое, но постарайтесь не повторяться!
Выберите сообщество поживее, чтобы там было много постов и много комментариев к ним. Посты должны содержать текст, и желательно не одну строчку, чтобы было, что исследовать. Обязательное условие: программа должна уметь скачивать со стены больше, чем 100 постов, и больше, чем 100 комментариев к посту (если их действительно больше 100). Кроме выкачивания нужно сделать следующее:
- Посчитайте длину каждого поста и каждого комментария в словах.
- Создайте график, описывающий, как длина поста соотносится со средней длиной комментариев.
- Помимо выкачивания постов и комментариев, программа должна смотреть в профиль пользователя, который написал пост или сделал комментарий, и узнавать о нём социолингвистическую информацию: например, возраст и город (если они указаны). В таком случае, название города по его id можно узнать средствами API, а возраст нужно уметь вычислять. Обратите внимание, что разные поля в описании профиля ведут себя по-разному, для каждого нужно обязательно посмотреть документацию!
- Постройте графики зависимости средней длины поста и средней длины комментария от различных социолингвистических параметров.
NB! Для графиков, описывающих среднюю длину поста и комментария (в словах), нужно выбрать 4 каких-нибудь разных параметра: город, возраст, наличие фото, средняя длина описания в поле "о себе", вуз, количество указанных в профиле учебных заведений, количество друзей, количество языков и т.п. Два из этих параметров нужно использовать для построения графиков зависимости длины поста, другие два — для комментария. Т.е. всего в этом пункте 4 графика.
Допустим, вы выбрали какой-нибудь паблик, где все посты публикуются от имени сообщества. Тогда можно построить графики зависимости средней длины поста, напимер, от месяца публикации и от года публикации (потому что об авторе нам тут сложно что-то узнать, а даже если и можно — он один, и это неинтересно). А комментаторов много, поэтому здесь можно использовать социолингвистическую информацию и построить графики зависимости длины комментария, например, от возраста и города. Или от пола и наличия фотографии в профиле. Или от пола и учебного заведения. Или от количества языков и средней длины "о себе". И так далее — простор для фантазии почти безграничен.
Хотя бы 2 параметра должны быть информацией из профиля пользователя (т.е. если у вас все 4 графика, например, про время — число, месяц, год и день недели публикации — то так не пойдет, т.к. программа должна уметь доставать информацию из профиля автора).
- Постройте график частотности для топ 20-30 слов, удалив перед этим стоп-слова. Проделайте это сначала с нелемматизированными текстами, а потом с лемматизированными (для лемматизации можно использовать pymystem pymorphy, на ваш вкус). Сильно ли отличаются эти графики? По желанию можно написать краткий анализ различий из 3-5 предложений. Можно построить не только диаграмму, но и облако слов.
- Всего у вас должно получиться 7 графиков. Оформить грайфики можно как угодно, но главное, чтобы это было не оформление по умолчанию! Т.е. что-то в стиле нужно изменить самостоятельно. Также на графиках обязательно должен быть заголовок, подписи осей и подписи делений (например, в случае с городами подписями по оси Х будут названия городов). Картинки с графиками должны быть сохранены отдельными файлами в репозитории (а не только отображаться в тетрадке).
- Выложите скачанные тексты: как и в случае с газетным корпусом, нужно выкладывать не на github, а в какое-нибудь облако, а ссылку на корпус добавить в readme.
- Формат корпуса: должно быть выложено два файла в plain text, один с оригинальными текстами, другой с лемматизированными. Порядок постов и коментариев неважен. Объем корпуса: > 100 постов с комментариями (т.е. начиная от 101 до бесконечности). Если к какому-то из постов написано больше 100 комментариев, то все они должны быть выкачаны.
NB! Задание выполняется в ipynb-тетрадке с понятным названием (скажем, HW6_VK). Кроме того, обязательно должна быть ссылка на корпус! Без соблюдения этих двух условий задание не проверяется!
Балл | Критерий |
---|---|
1 | Программа запускается и оформлена по PEP8. Соответствие PEP8 можно проверить с помощью команды pycodestyle my_script_name.py в командной строке. |
2 | Программа умеет выкачивать посты и комментариии (больше 100 постов и больше 100 комментариев к посту). |
1 | Посчитана средняя длина поста и комментария в словах и построены соответствующие графики. |
1 | Программа умеет доставать из профиля пользователя параметры №1 и №2 для графиков про среднюю длину поста (например, город с названием и возраст). В случае пабликов можно брать параметры не из профиля автора (например, год и день недели публикации поста). |
1 | Построены графики зависимости средней длины поста от этих двух параметров, оформленные согласно требованиям. Графики со стандартными настройками без подписей — 0.5 балла. |
1 | Программа умеет доставать из профиля пользователя параметры №3 и №4 для графиков про среднюю длину комментария. |
1 | Построены графики зависимости средней длины поста от этих двух параметров, оформленные согласно требованиям. Графики со стандартными настройками без подписей — 0.5 балла. |
1 | Построен график частотности для топ 20-30 слов по нелемматизированным текстам. График со стандартными настройками без подписей — 0.5 балла. |
1 | Построен график частотности для топ 20-30 слов по лемматизированным текстам. График со стандартными настройками без подписей — 0.5 балла. |
1 | Бонусный балл. Построено облако слов для топ 20-30 слов по лемматизированным текстам. |
4 | Бонусный балл. Более сложная структура корпуса: сохранены не только тексты, но информация о пользователях, написавших тот или иной пост (id, город, возраст, пол, имя и далее по желанию), id поста/комментария и связь комментариев с постами. Можно сделать это в виде базы данных, можно просто в csv-таблице. В случае с БД за это задание дается 4 балла, в случае с таблицей — 3 балла. |
Группа | Дедлайн |
---|---|
1 | 4 мая, 23.59 |
2 | 28 апреля, 23.59 |
3 | 4 мая, 23.59 |
4 |