Hoe ik Habr parsearde, diel 1: trends

Doe't it Nijjiers Olivier klear wie, hie ik neat te dwaan, en ik besleat alle artikels fan Habrahabr (en relatearre platfoarms) nei myn kompjûter te downloaden en wat ûndersyk te dwaan.

It die bliken ferskate nijsgjirrige ferhalen. De earste fan har is de ûntwikkeling fan it formaat en ûnderwerpen fan artikels oer de 12 jier fan it bestean fan 'e side. Bygelyks, de dynamyk fan guon ûnderwerpen is frij yndikatyf. Fuortset ûnder de besuniging.

Hoe ik Habr parsearde, diel 1: trends

Parsing proses

Om te begripen hoe't Habr ûntwikkele, wie it nedich om te gean troch al syn artikels en extract meta-ynformaasje út harren (bygelyks datums). De rûnwei wie maklik, om't de keppelings nei alle artikels lykje op "habrahabr.ru/post/337722/", en de nûmers wurde strikt yn folchoarder oanjûn. Doe't ik wist dat de lêste post in oantal wat minder as 350 tûzen hat, gie ik gewoan troch alle mooglike dokumint-ID's yn in lus (Python-koade):

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

function download_document besiket de side te laden mei de oerienkommende id en besiket sinfolle ynformaasje út 'e html-struktuer te heljen.

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)

Tidens it parsingproses ûntduts ik ferskate nije dingen.

As earste sizze se dat it meitsjen fan mear prosessen dan kearnen yn 'e prosessor nutteloos is. Mar yn myn gefal die bliken dat de beheinende boarne net de prosessor is, mar it netwurk, en 100 prosessen wurkje rapper dan 4 of, bygelyks, 20.

Twads wiene d'r yn guon berjochten kombinaasjes fan spesjale tekens - bygelyks eufemismen lykas "%&#@". Dat die bliken html.parser, dy't ik earst brûkte, reagearret op de kombinaasje &# pynlik, sjoen it it begjin fan de html entiteit. Ik wie op it punt om swarte magy út te fieren, mar it foarum suggerearre dat ik de parser gewoan feroarje koe.

As tredde koe ik alle publikaasjes op trije nei downloade. Dokuminten nûmere 65927, 162075 en 275987 waarden fuortdaliks wiske troch myn antivirus. Dit binne respektivelik artikels oer in keatling fan javaskripts dy't in kweade pdf downloade, in SMS ransomware yn 'e foarm fan in set plug-ins foar browsers, en de side CrashSafari.com, dy't iPhones stjoert om te herstarten. It antyvirus ûntduts letter in oar artikel, tidens in systeemscan: post 338586 oer skripts op 'e webside fan in húsdierwinkel dy't de prosessor fan 'e brûker brûke om cryptocurrency te minen. Dat wy kinne it wurk fan it antyfirus as frij adekwaat beskôgje.

D'r wiene mar de helte fan it potinsjele maksimum fan "live" artikels - 166307 stikken. Oer de rest jout Habr de opsjes "de side is ferâldere, waard wiske of bestie hielendal net." No, alles kin barre.

It opladen fan artikels waard folge troch technysk wurk: de publikaasjedatums moasten bygelyks omset wurde fan it formaat "'21 desimber 2006 om 10:47 oere" nei de standert ien datetime, en "12,8k" views - at 12800. Op dit stadium, ferskate mear ynsidinten ûntstien. De grappichste is besibbe oan stimmen tellen en gegevens typen: guon âlde berjochten hie in int oerstreaming, en hja krigen 65535 stimmen.

Hoe ik Habr parsearde, diel 1: trends

As gefolch hawwe de teksten fan 'e artikels (sûnder foto's) my 1.5 gigabytes, opmerkings mei meta-ynformaasje - nochris 3, en sawat hûndert megabytes - meta-ynformaasje oer de artikels. Dit kin wurde bewarre folslein yn RAM, dat wie in noflike ferrassing foar my.

Ik begon artikels te analysearjen net mei de teksten sels, mar mei meta-ynformaasje: datums, tags, hubs, views en "likes". It die bliken dat sy ek in protte fertelle koe.

Habrahabr ûntwikkeling trends

Artikels op de side binne publisearre sûnt 2006; meast yntinsyf yn 2008-2016.

Hoe ik Habr parsearde, diel 1: trends

Hoe aktyf dizze artikels op ferskillende tiden lêzen binne is net sa maklik te beoardieljen. Teksten út 2012 en jonger krigen mear aktive reaksjes en wurdearrings, mar nijere teksten hawwe mear werjeften en blêdwizers. Dizze metriken gedragen har deselde manier (se foelen mei de helte) mar ien kear, yn 2015. Miskien, yn in situaasje fan ekonomyske en politike krisis, is de oandacht fan lêzers ferskood fan IT-blogs nei pynlikere problemen.

Hoe ik Habr parsearde, diel 1: trends

Neist de artikels sels haw ik der ek opmerkings op downloade. D'r wiene 6 miljoen opmerkingen, lykwols, 240 tûzen fan harren waarden ferbean ("in UFO fleach yn en publisearre dizze ynskripsje hjir"). In nuttich skaaimerk fan opmerkings is dat se in tiidstempel hawwe. Troch de timing fan opmerkingen te bestudearjen, kinne jo rûchwei begripe wannear't artikels überhaupt lêzen wurde.

It die bliken dat de measte artikels earne fan 10 oant 20 oere skreaun en kommentearre wurde, d.w.s. op in typyske Moskou wurkdei. Dit kin betsjutte dat Habr wurdt lêzen foar profesjonele doelen, en dat it in goede manier is om op it wurk út te stellen. Trouwens, dizze ferdieling fan tiid fan 'e dei is stabyl sûnt de oprjochting fan Habr oant hjoed de dei.

Hoe ik Habr parsearde, diel 1: trends

It wichtichste foardiel fan in tiidstempel is lykwols net de tiid fan 'e dei, mar it "aktive libben" fan it artikel. Ik berekkene hoe't de tiid waard ferdield fan 'e publikaasje fan in artikel oant syn kommentaar. It die bliken dat no it mediaankommentaar (griene line) oer 20 oeren komt, d.w.s. Yn de earste dei nei publikaasje bliuwt yn trochsneed wat mear as de helte fan alle reaksjes op in artikel oer. En binnen twa dagen is 75% fan alle opmerkingen oerbleaun. Boppedat waarden eardere artikels noch flugger lêzen - yn 2010 kaam bygelyks de helte fan de reaksjes binnen de earste 6 oeren.

Hoe ik Habr parsearde, diel 1: trends

It kaam my as in ferrassing dat de opmerkings langer wurden binne: it trochsneed oantal karakters yn in reaksje is hast ferdûbele tidens it bestean fan Habr!

Hoe ik Habr parsearde, diel 1: trends

Feedback dy't ienfâldiger is dan opmerkings is stimmen. Oars as in protte oare boarnen, kinne jo op Habré net allinich foar-, mar ek neidielen pleatse. Lêzers brûke dy lêste kâns lykwols net sa faak: it oanpart fan net leuk is op it stuit sa'n 15% fan alle útbrochte stimmen. Eartiids wiene der mear, mar mei de tiid waarden de lêzers freonliker.

Hoe ik Habr parsearde, diel 1: trends

De teksten sels feroare yn de rin fan de tiid. Bygelyks, de typyske lingte fan tekst is net ophâlden te groeien stadichoan sûnt de lansearring fan de side, nettsjinsteande krizen. Yn de rin fan in desennia binne teksten hast tsien kear langer wurden!

Hoe ik Habr parsearde, diel 1: trends

Ek de styl fan de teksten feroare (nei in earste ynskatting). Yn 'e earste jierren fan Habr's bestean, bygelyks, naam it oandiel fan koade en nûmers yn teksten ta:

Hoe ik Habr parsearde, diel 1: trends

Nei't ik de algemiene dynamyk fan 'e side begrepen, besleat ik te mjitten hoe't de populariteit fan ferskate ûnderwerpen feroare. Underwerpen kinne wurde identifisearre út teksten automatysk, mar om te begjinnen mei, kinne jo net opnij útfine it tsjil, mar brûk klear makke tags tafoege troch de skriuwers fan elk artikel. Ik haw fjouwer typyske trends sjen litten op 'e kaart. It tema "Google" dominearre ynearsten (miskien benammen troch SEO-optimisaasje), mar ferlear elk jier gewicht. Javascript hat in populêr ûnderwerp west en bliuwt te wêzen, mar masine learen is yn 'e lêste jierren allinich rap begon te winnen. Linux bliuwt it hiele desennium like relevant.

Hoe ik Habr parsearde, diel 1: trends

Fansels waard ik ynteressearre yn hokker ûnderwerpen mear lêzeraktiviteit lûke. Ik berekkene it mediaan oantal werjeften, stimmen en opmerkings foar elk ûnderwerp. Hjir is wat der bard is:

  • Meast besjoene ûnderwerpen: arduino, webûntwerp, webûntwikkeling, digest, keppelings, css, html, html5, nginx, algoritmen.
  • De meast "liked" ûnderwerpen: VKontakte, humor, jquery, opera, c, html, webûntwikkeling, html5, css, webûntwerp.
  • De meast besprutsen ûnderwerpen: opera, skype, freelancing, VKontakte, ubuntu, wurk, nokia, nginx, arduino, firefox.

Trouwens, om't ik ûnderwerpen fergelykje, kin ik se rangearje op frekwinsje (en de resultaten fergelykje mei ferlykber artikel út 2013).

  • Yn 'e rin fan' e jierren fan it bestean fan Habr binne de populêrste tags (yn ôfnimmende folchoarder) google, android, javascript, microsoft, linux, php, apple, java, python, programmearring, opstarten, ûntwikkeling, ios, opstarten, sosjale netwurken west
  • Yn 2017 wiene de populêrste javascript, python, java, android, ûntwikkeling, linux, c++, programmearring, php, c#, ios, masine learen, ynformaasjefeiligens, microsoft, react

As jo ​​​​dizze wurdearrings fergelykje, kinne jo bygelyks omtinken jaan oan 'e oerwinnende mars fan Python en it útstjerren fan php, of oan' e "ôffal" fan it opstarttema en de opkomst fan masine learen.

Net alle tags op Habré hawwe sa'n dúdlike tematyske kleur. Hjir binne bygelyks in tsiental tags dy't mar ien kear ferskynden, mar my gewoan grappich liken. Dus: "idee is de motor fan foarútgong", "opstarten fan in disketteôfbylding", "de steat Iowa", "drama", "superalesha", "stoommotor", "wat te dwaan op sneon", "Ik in foks yn 'e molen hawwe", "en it gie út lykas altyd," "wy koenen gjin grappige tags betinke." Om it ûnderwerp fan sokke artikels te bepalen, binne tags net genôch - jo moatte ûnderwerpmodellen útfiere op 'e teksten fan' e artikels.

In mear detaillearre analyze fan 'e ynhâld fan' e artikels sil wêze yn 'e folgjende post. Earst sil ik in model bouwe dat it oantal werjeften foarseit dat in artikel sil ûntfange op basis fan de ynhâld. Twads wol ik it neurale netwurk leare om teksten te generearjen yn deselde styl as de auteurs fan Habr. Dus abonnearje :)

PS En hjir is it, opnommen dataset.

Boarne: www.habr.com

Add a comment