Numb3rs, OpenData и HowItWorks

Материал из 0x1.tv

Numb3rs, OpenData и HowItWorks.png

Бывает авторы интересуются статистикой просмотра своих докладов, любопытные — полной статистикой, чтобы поиграться в датасайнс, ну а те, кому надо поиграть в 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 можно включать внутрь статьи, с параметризацией, любую другую статью, но просто для удобства, совсем уж технические шаблоны-макросы, решено отсадить в отдельный неймспейс).

[svg]


В основном, неймспейсы определяют контекст для операции «ссылка».

Если идет ссылка на обычную статью — то получается обычная гиперссылка. Если ссылаются на статью-файл — то обычно, будет вставка картинки или другое превью. Если ссылаться на статью-категорию — то возникает принадлежность исходной статьи категории. Сама категория также может принадлежать другим категориям, и возникает сетевая-графовая иерархия вложенности → ну вот наверно иллюстрирующая картинка, хотя она показывает, что все несколько запущено и нужно много работы, чтобы поддерживать все это в сбалансированном состоянии.

Да, в отличие от убогих фолксономически классификаций через плоские теги[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
    • Т.е. надо и парсить текст, убирать стоп-слова.
    • И как-то отклассифицировать, учесть имеющиеся категории
    • Большие категории (высокоуровневые, в которых вкладывается много более узких), должны котироваться слабее.

ключ
статьи по заголовкам.
значение
словарь с текстом-заголовком и еще одним словарем '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 (чтобы при переименовании статьи не пропадали комментарии).


  1. Ну, 8 лет назад это был ведущий сервис комментариев, и была надежда, что «самый стандартный сервис комментариев» побудит к фидбеку.
  2. концепции проекта Zanadu
  3. Самые популярные теги на фотохостингах — «я» и «фото», а на видеохостингах — «я» и «видео»
  4. Может когда-нибудь и в соцсети, за количеством комментариев, но пока в соцсетях с комментариями у меня тухло
  5. А если нужно слить все видео → вам сюда