Numb3rs, OpenData и HowItWorks
Бывает авторы интересуются статистикой просмотра своих докладов, любопытные — полной статистикой, чтобы поиграться в датасайнс, ну а те, кому надо поиграть в NLP/Text Analysis, или быстро поднять MVP-стартапа на тему «монетизируем контент конференций» — интересуются, как бы взять все, без гемора с «краулингом-скрейпингом-парсингом».
Или есть даже желание что-то запатчить и законтрибьютить?
Хороший повод кратко рассказать, как все работает и откуда все взять.
Как все устроено
Технически — сайт состоит из self-hosted CMS, где лежат описания докладов и спикеров, слайды, видео, залитого на Vimeo и Youtube, сервиса комментариев на Disqus[1], ну и всякой мелочи.
CMS для сайта основана на MediaWiki c дополнениями из проекта http://wiki.4intra.net, вот Special:Version — детально набор расширений с версиями.
Буду очень рад верстальщику с опытом верстки под мобильные устройства, много лет сам не могу осилить. Ну или дизайнеру. Или даже дизайнеру логотипов/faviconoв, студию лебедева не предлагать.
Вот код дизайна «скина», который использует сервис генерации уникальных бекграундов.
Сверхкраткий ликбез про концепции MediaWiki (википедия и почти все викисайты в интернете).
Основной атом информации там — страница. Page. Уникально идентифицируемая своим заголовком (он же по сути URL страницы). Это очень радикальный ход — уровнять имена, названия, заголовки, идентификаторы и ссылки (то, что всегда разделялось в классических технологиях документирования), и наверное, очень удачный — сильно упрощает гиперссылки, которые становятся двухсторонние, как должно было быть в правильном интернете[2], а проблемы временной нецелостности при переименованиях решают перенаправлениями и догоняющими исправлениями.
Технически, у страницы есть неймспейсы — это то, что в заголовке идет до двоеточия, что выделяет, например, страницы-файлы (картинки-документы и т.п.) из неймспейса «File:»/«Файл:» и категории — неймспейс «Category:»/«Категория:», и страницы-шаблоны (технически ничего специального в них нет, в MediaWiki можно включать внутрь статьи, с параметризацией, любую другую статью, но просто для удобства, совсем уж технические шаблоны-макросы, решено отсадить в отдельный неймспейс).
В основном, неймспейсы определяют контекст для операции «ссылка».
Если идет ссылка на обычную статью — то получается обычная гиперссылка. Если ссылаются на статью-файл — то обычно, будет вставка картинки или другое превью. Если ссылаться на статью-категорию — то возникает принадлежность исходной статьи категории. Сама категория также может принадлежать другим категориям, и возникает сетевая-графовая иерархия вложенности → ну вот наверно иллюстрирующая картинка, хотя она показывает, что все несколько запущено и нужно много работы, чтобы поддерживать все это в сбалансированном состоянии.
Да, в отличие от убогих фолксономически классификаций через плоские теги[3], тут достаточно мощный механизм для классификации-категоризации-онтологизации любой предметной области, что и демонстрирует википедия. Хотя конечно, над этим требуется работать.
Если кратко — то доклады у нас — это обычные статьи, слайды и пикрелейтед к ним лежат в неймспейсе «файл», докладчики у нас — статьи-категории, лежащие в категории
Category:Докладчики (тем, кому уже не напишешь — в Category:RIP), конференции у нас — категории в категории Категория:Конференции (они могут группироваться в Категория:Линейки_конференций), ну а практически все остальные категории
используются для тематической классификации.
Тут открытая задача, научится делать краткую выжимку из аннотации под заданное число символов — для публикации в твиттер и прочие соцсети. Сейчас это просто вырезание середины, что конечно, убого.
В самой странице текст — mediawiki-разметка, на которой последовательно…
- Cсылка на категорию-автора (или авторов), через шаблон {{Speaker| }}
- блок тега <blockquote></blockquote> — аннотация.
- Встраивание видео с vimeo и ссылка на видео с ютуба (с шаблонами там думаю, можно понять).
- Ссылка на слайды если есть.
- Иногда бывают обьемные тезисы или стенограммы, но в целом это редкость.
- Ссылка на пикрелейтед, с указанием, чтобы эту картинку выбирали соцсети для превью,
- Ссылки-связи с тематическими категории.
В самом конце статьи или категории, идет статистика, в сыром виде выглядящая как-то так:
{{stats|disqus_comments=12|median_plays=312|refresh_time=2020-07-07T18:45:21.060970|vimeo_comments=1|vimeo_plays=392|youtube_comments=10|youtube_plays=232}}
где наверное, все понятно, кроме «median_plays» — это свойство возникает у категорий, как медиана просмотра докладов в этой категории (остальные параметры для категории — это сумма соотвествующих параметров по статьям в этой категории).
Важное — эти свойства сами не возникают, и realtime не обновляются — приходится отдельным софтом бегать за ними в ютуб-вимео-disqus[4], со всякими хитростями (глюки и ограничения API и т.п.).
Итак, если вы захотите помочь мне с открытыми задачами, или что-то поковырять свое, посчитать какие-нибудь метрики, и порисовать картинки и графики, конечно, можно слить всю базу через Special:Export[5], потом распаковывать, парсить XML, парсить разметку… наверно это скучно.
Поэтому я предлагаю вам готовый, python-pickle dataset, с самым важным — тексты, статистика-просмотров комментариев, вложенность категорий.
Датасет
Open problems — предложить категории для страницы — максимально узкие и походящие, может несколько.
- Основной вариант — из существующих категорий.
- Возможно дополнительно показать близкие статьи — чтобы уже вручную создать новые категории.
- Тут явно ML c элементами NTLK
- Т.е. надо и парсить текст, убирать стоп-слова.
- И как-то отклассифицировать, учесть имеющиеся категории
- Большие категории (высокоуровневые, в которых вкладывается много более узких), должны котироваться слабее.
…
- http://video.ispras.ru/channels/misc/datasets/0x1
- Python pickle (структура не плоская, плюс текст, все это в CSV плохо ложиться), проще в нативный питон.
- Словарь:
- ключ
- статьи по заголовкам.
- значение
- словарь с текстом-заголовком и еще одним словарем 'stats', со всей вытащенной статистикой.
Ну как-то так:
import pprint import pickle ds = pickle.load(open('0x1', 'rb')) pprint.pprint(sorted(list(ds.keys()))[:4]) … ['0MQ — Сокеты на стероидах (Сергей Гулько, OSDN-UA-2012)', '10 шагов к лучшему качеству кода приемочных тестов (Вагиф Абилов, ' 'AgileDays-2014)', '100%-ный просмотр кода. Зачем и как? (Леонид Савченков, SECR-2013)', '19 личностных потребностей, или чего на самом деле хотят пользователи ' 'ИТ-продуктов (Тамара Кулинкович, ProductCampMinsk-2014)'] … pprint.pp(ds['19 личностных потребностей, или чего на самом деле хотят пользователи ИТ-продуктов (Тамара Кулинкович, ProductCampMinsk-2014)']) { 'id': 42, 'title': '19 личностных потребностей, или чего на самом деле хотят ' 'пользователи ИТ-продуктов (Тамара Кулинкович, ' 'ProductCampMinsk-2014)', 'text': ';Докладчик: {{Speaker|Тамара Кулинкович}}\n' '<blockquote>\n' '</blockquote>\n' '== Видео ==\n' '\n' '{{vimeoembed|104593083|800|450}}\n' '{{youtubelink|C5j2u-wrj2I}}{{letscomment}}\n' '\n' '== Слайды ==\n' '[[File:19 личностных потребностей, или чего на самом деле хотят ' 'пользователи ИТ-продуктов (Тамара Кулинкович, ' 'ProductCampMinsk-2014).pdf|left|page=-|256px]]\n' '\n' … '\n' '\n' '<!-- topub -->\n' '{{stats|disqus_comments=0|refresh_time=2020-07-07T19:27:42.310424|vimeo_comments=1|vimeo_plays=119|youtube_comments=0|youtube_plays=87}}', 'stats': {'disqus_comments': 0, 'refresh_time': '2020-07-07T19:27:42.310424', 'vimeo_comments': '1', 'vimeo_plays': 119, 'youtube_comments': 0, 'youtube_plays': 87}, 'categories': {'Категория:HasSpeaker', 'Категория:ProductCampMinsk-2014', 'Категория:Тамара Кулинкович', 'Категория:Управление продуктами'}}
Обратите внимание на еще один атрибут — id статьи. В отличие от имени-названия-урла он неизменен (даже при переименованиях), и он нужен, чтобы ссылаться на ветки комментариев в Disqus (чтобы при переименовании статьи не пропадали комментарии).
- ↑ Ну, 8 лет назад это был ведущий сервис комментариев, и была надежда, что «самый стандартный сервис комментариев» побудит к фидбеку.
- ↑ концепции проекта Zanadu
- ↑ Самые популярные теги на фотохостингах — «я» и «фото», а на видеохостингах — «я» и «видео»
- ↑ Может когда-нибудь и в соцсети, за количеством комментариев, но пока в соцсетях с комментариями у меня тухло
- ↑ А если нужно слить все видео → вам сюда