Hoe ek Habr ontleed het, deel 1: tendense

Toe die Nuwejaar se Olivier klaar was, het ek niks gehad om te doen nie, en ek het besluit om al die artikels van Habrahabr (en verwante platforms) na my rekenaar af te laai en te verken.

Daar was verskeie interessante stories. Die eerste daarvan is die ontwikkeling van die formaat en onderwerpe van artikels oor die 12 jaar van die webwerf se bestaan. Byvoorbeeld, die dinamika van sommige onderwerpe is baie aanduidend. Voortsetting - onder die snit.

Hoe ek Habr ontleed het, deel 1: tendense

Ontledingsproses

Om te verstaan ​​hoe Habr ontwikkel het, was dit nodig om deur al sy artikels te gaan en meta-inligting daaruit te onttrek (byvoorbeeld datums). Die omseil was maklik, want skakels na alle artikels lyk soos "habrahabr.ru/post/337722/", en die nommers word streng in volgorde gegee. Met die wete dat die laaste pos 'n nommer effens minder as 350 duisend het, het ek sopas deur al die moontlike dokument-ID in 'n lus (Python-kode) gegaan:

import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
    docs = p.map(download_document, np.arange(350000))

Funksie download_document probeer om die bladsy met die ooreenstemmende id te laai en probeer betekenisvolle inligting uit die html-struktuur onttrek.

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Download and process a Habr document and its comments """
    # выгрузка документа
    r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/')
    # парсинг документа
    soup = BeautifulSoup(r.text, 'html5lib') # instead of html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # такое бывает, если статья не существовала или удалена
        doc['status'] = 'title_not_found'
    else:
        doc['status'] = 'ok'
        doc['title'] = soup.find("span", {"class": "post__title-text"}).text
        doc['text'] = soup.find("div", {"class": "post__text"}).text
        doc['time'] = soup.find("span", {"class": "post__time"}).text
        # create other fields: hubs, tags, views, comments, votes, etc.
        # ...
    # сохранение результата в отдельный файл
    fname = r'files/' + str(pid) + '.pkl'
    with open(fname, 'wb') as f:
        pickle.dump(doc, f)

In die proses van ontleding het ek verskeie nuwe dinge ontdek.

Eerstens sê hulle dat die skep van meer prosesse as wat daar kerne in die verwerker is nutteloos is. Maar in my geval het dit geblyk dat die beperkende hulpbron nie die verwerker is nie, maar die netwerk, en 100 prosesse werk vinniger as 4 of byvoorbeeld 20 uit.

Tweedens was daar in sommige plasings kombinasies van spesiale karakters - byvoorbeeld eufemismes soos "%&#@". Dit het geblyk dat html.parser, wat ek eerste gebruik het, reageer op die kombinasie &# pynlik, aangesien dit die begin van die html-entiteit beskou word. Ek was reeds van plan om swart magie te doen, maar die forum het voorgestel dat jy net die ontleder kan verander.

Derdens het ek daarin geslaag om alle publikasies af te laai, behalwe drie. Dokumente genommer 65927, 162075 en 275987 is onmiddellik deur my antivirus uitgevee. Dit is onderskeidelik artikels oor 'n javascript-ketting wat 'n kwaadwillige pdf aflaai, SMS-ransomware in die vorm van 'n stel blaaier-inproppe, en die CrashSafari.com-werf wat iPhones na 'n herlaai stuur. Antivirus het later 'n ander artikel ontdek, tydens 'n stelselskandering: plasing 338586 oor skrifte op die troeteldierwinkelwebwerf wat die gebruiker se verwerker gebruik om kriptogeldeenhede te ontgin. Ons kan dus oorweeg dat die werk van die antivirus redelik voldoende is.

"Regstreekse" artikels blyk net die helfte van die potensiële maksimum te wees - 166307 stukke. Oor die res gee Habr opsies "die bladsy is verouderd, is uitgevee of het glad nie bestaan ​​nie." Wel, enigiets kan gebeur.

Die oplaai van artikels is gevolg deur tegniese werk: publikasiedatums moes byvoorbeeld omgeskakel word van die formaat "'21 Desember 2006 om 10:47 vm" na die standaard datetime, en "12,8k" aansigte - in 12800. Op hierdie stadium het nog 'n paar voorvalle uitgekom. Die snaaksste een het te doen met stemmetellings en datatipes: sommige ou plasings het 'n int-oorloop gehad en het elk 65535 stemme gekry.

Hoe ek Habr ontleed het, deel 1: tendense

Gevolglik het die tekste van artikels (sonder prente) my 1.5 gigagrepe geneem, kommentaar met meta-inligting - nog 3, en ongeveer honderd megagrepe - meta-inligting oor artikels. Dit kan heeltemal in RAM gehou word, wat vir my 'n aangename verrassing was.

Ek het die ontleding van artikels nie uit die tekste self begin nie, maar van meta-inligting: datums, etikette, hubs, sienings en hou van. Dit het geblyk dat sy baie kon vertel.

Habrahabr Ontwikkelingstendense

Artikels op die webwerf is sedert 2006 gepubliseer; mees intensief - in 2008-2016.

Hoe ek Habr ontleed het, deel 1: tendense

Hoe aktief hierdie artikels op verskillende tye gelees is, is nie so maklik om te bepaal nie. Tekste van 2012 en jonger het meer kommentaar en graderings gekry, maar nuwer tekste het meer kyke en boekmerke. Hierdie maatstawwe het net een keer, in 2015, dieselfde gedra (gehalveer). Miskien, in 'n situasie van ekonomiese en politieke krisis, het die aandag van lesers verskuif van IT-blogs na meer pynlike kwessies.

Hoe ek Habr ontleed het, deel 1: tendense

Benewens die artikels self het ek nog kommentaar daarby afgelaai. Daar was 6 miljoen opmerkings, maar 240 duisend daarvan is verbied ("'n UFO het ingevlieg en hierdie inskripsie hier gepubliseer"). 'n Nuttige eienskap van kommentaar is dat hulle 'n tydstempel het. Deur die tyd van kommentaar te bestudeer, kan jy min of meer verstaan ​​wanneer artikels enigsins gelees word.

Dit het geblyk dat die meeste van die artikels iewers van 10:20 tot XNUMX:XNUMX beide geskryf en kommentaar gelewer word, m.a.w. op 'n tipiese werksdag in Moskou. Dit kan beteken dat Habr vir professionele doeleindes gelees word, en dat dit 'n goeie manier is om by die werk uit te stel. Terloops, hierdie verspreiding van die tyd van die dag is stabiel vanaf die grondslag van Habr tot vandag toe.

Hoe ek Habr ontleed het, deel 1: tendense

Die grootste voordeel van 'n kommentaar-tydstempel is egter nie die tyd van die dag nie, maar die duur van die "aktiewe lewe" van die artikel. Ek het bereken hoe die tyd van die publikasie van die artikel tot die kommentaar daarvan versprei word. Dit het geblyk dat nou die mediaan kommentaar (groen lyn) oor sowat 20 uur kom, m.a.w. op die eerste dag na publikasie word gemiddeld bietjie meer as die helfte van alle kommentaar op die artikel gelaat. En binne twee dae los hulle 75% van alle kommentaar. Terselfdertyd is vroeëre artikels selfs vinniger gelees – byvoorbeeld, in 2010 het die helfte van die kommentaar in die eerste 6 uur gekom.

Hoe ek Habr ontleed het, deel 1: tendense

Dit was vir my 'n verrassing dat opmerkings langer geword het: die gemiddelde aantal karakters in 'n opmerking het amper verdubbel oor die leeftyd van Habr!

Hoe ek Habr ontleed het, deel 1: tendense

Makliker terugvoer as kommentaar is stemme. In teenstelling met baie ander hulpbronne, kan jy op Habré nie net pluspunte plaas nie, maar ook minusse. Lesers gebruik egter nie die laaste geleentheid so gereeld nie: die huidige aandeel afkeure is sowat 15% van alle stemme wat uitgebring word. Daar was vroeër meer, maar met verloop van tyd het lesers vriendeliker geword.

Hoe ek Habr ontleed het, deel 1: tendense

Die tekste self het mettertyd verander. Byvoorbeeld, die tipiese lengte van die teks hou nie op om bestendig te groei vanaf die begin van die webwerf nie, ten spyte van die krisisse. In 'n dekade het tekste amper tien keer langer geword!

Hoe ek Habr ontleed het, deel 1: tendense

Die styl van die tekste (tot 'n eerste benadering) het ook verander. Gedurende die eerste jare van Habr se bestaan ​​het die aandeel van kode en nommers in tekste byvoorbeeld toegeneem:

Hoe ek Habr ontleed het, deel 1: tendense

Nadat ek die algehele dinamika van die webwerf verstaan ​​het, het ek besluit om te meet hoe die gewildheid van verskeie onderwerpe verander het. Onderwerpe kan outomaties uit tekste gekies word, maar om mee te begin, kan jy nie die wiel herontdek nie, maar gebruik klaargemaakte etikette wat deur die skrywers van elke artikel aangebring is. Ek het vier tipiese tendense op die grafiek geteken. Die "Google"-tema het aanvanklik oorheers (dalk hoofsaaklik as gevolg van SEO), maar het oor die jare gewig verloor. Javascript was 'n gewilde onderwerp en groei steeds stadig, maar masjienleer het eers in onlangse jare vinnig gewild begin word. Linux, aan die ander kant, het deur die dekade ewe relevant gebly.

Hoe ek Habr ontleed het, deel 1: tendense

Natuurlik het ek begin belangstel in watter onderwerpe meer lesersaktiwiteit lok. Ek het die mediaan aantal sienings, stemme en opmerkings in elke onderwerp bereken. Hier is wat gebeur het:

  • Mees gekykte onderwerpe: arduino, webontwerp, webontwikkeling, digest, skakels, css, html, html5, nginx, algoritmes.
  • Die mees "gelaaide" onderwerpe: vkontakte, humor, jquery, opera, c, html, webontwikkeling, html5, css, webontwerp.
  • Die mees bespreekte onderwerpe: opera, skype, vryskut, vkontakte, ubuntu, werk, nokia, nginx, arduino, firefox.

Terloops, aangesien ek onderwerpe vergelyk, kan jy hulle volgens frekwensie rangskik (en die resultate vergelyk met soortgelyke artikel uit 2013).

  • Vir al die jare van Habr se bestaan ​​is die gewildste merkers (in dalende volgorde) google, android, javascript, microsoft, linux, php, apple, java, python, programmering, opstart, ontwikkeling, ios, opstart, sosiale netwerke
  • In 2017 was die gewildste javascript, python, java, android, ontwikkeling, linux, c++, programmering, php, c#, ios, masjienleer, inligtingsekuriteit, microsoft, react

Wanneer jy hierdie graderings vergelyk, kan jy byvoorbeeld aandag gee aan die seëvierende opmars van Python en die uitwissing van php, of aan die "sonsondergang" van opstartonderwerpe en die opkoms van masjienleer.

Nie alle etikette op Habré het so 'n ooglopende tematiese kleur nie. Hier is byvoorbeeld 'n dosyn etikette wat net een keer ontmoet het, maar net vir my snaaks gelyk het. Dus: "idee is die dryfveer van vooruitgang", "selflaai vanaf 'n diskettebeeld", "Iowa State", "drama", "superalesh", "stoomenjin", "dinge om te doen op Saterdag", "Ek het 'n jakkals in 'n vleismeul", "a dit het geblyk soos altyd", "ons kon nie met snaakse etikette vorendag kom nie". Om die onderwerp van sulke artikels te bepaal, is etikette nie genoeg nie - jy sal tematiese modellering op die tekste van die artikels moet uitvoer.

'n Meer gedetailleerde ontleding van die inhoud van die artikels sal in die volgende pos wees. Eerstens gaan ek 'n model bou wat die aantal bladsybesigtigings vir 'n artikel op grond van die inhoud daarvan voorspel. Tweedens wil ek die neurale netwerk leer om tekste te genereer in dieselfde styl as die skrywers van Habr. So teken in 🙂

PS En hier is die biep datastel.

Bron: will.com

Voeg 'n opmerking