Min çawa Habr par kir, beş 1: meyldar

Dema ku Olivier ya Sersalê xilas bû, tiştek ku ez bikim tune bû, û min biryar da ku hemî gotaran ji Habrahabr (û platformên têkildar) li ser komputera xwe dakêşim û hin lêkolînan bikim.

Ew çend çîrokên balkêş derketin. Yekem ji wan pêşveçûna format û mijarên gotaran di 12 salên hebûna malperê de ye. Mînakî, dînamîkên hin mijaran pir diyarker in. Berdewam - di bin birîn.

Min çawa Habr par kir, beş 1: meyldar

Pêvajoya parsing

Ji bo ku fêm bikin ka Habr çawa pêşket, pêdivî bû ku meriv hemî gotarên wê derbas bike û meta-agahiyên ji wan derxîne (mînak, tarîx). Derbasbûn hêsan bû, ji ber ku lînkên hemî gotaran dişibin "habrahabr.ru/post/337722/", û hejmar bi rêzdarî têne destnîşan kirin. Ez dizanim ku posta paşîn jimareyek hindiktir ji 350 hezarî heye, min bi tenê hemî nasnameyên belgeyên mimkun di xelekekê de derbas kir (koda Python):

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

function download_document hewl dide ku rûpelê bi id-ya têkildar bar bike û hewl dide ku agahdariya watedar ji avahiya html derxe.

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)

Di pêvajoya parskirinê de min gelek tiştên nû keşf kir.

Pêşîn, ew dibêjin ku di pêvajoyê de çêkirina pêvajoyan ji navgînan bêtir bêkêr e. Lê di doza min de derket holê ku çavkaniya sînordar ne pêvajo ye, lê torê ye, û 100 pêvajo ji 4 an, bêje, 20 zûtir dixebitin.

Ya duyemîn, di hin postan de hevbendiyên karakterên taybetî hebûn - mînakî, biwêjên mîna "%&#@". Derket holê ku html.parser, ku min pêşî bikar anî, bi tevlihevkirinê re reaksiyon dike &# bi êş, ew destpêka sazûmana html-ê dihesibînin. Min dixwest sêrbaziya reş bikim, lê forumê pêşniyar kir ku ez dikarim bi tenê parserê biguherim.

Ya sêyemîn, min karîbû ji bilî sê weşanan hemûyan dakêşînim. Belgeyên bi hejmarên 65927, 162075, û 275987 tavilê ji hêla antivirusê min ve hatin jêbirin. Vana bi rêzê ve gotarên li ser zincîreka javascript-ê ne ku pdf-ek xirab dakêşîne, ransomwareyek SMS-ê di forma komek pêvekên ji bo gerokan de, û malpera CrashSafari.com, ku iPhone-an ji nû ve dişîne. Antivirus paşê gotarek din dît, di dema şopandina pergalê de: 338586 li ser nivîsarên li ser malpera dikanek heywanan ku pêvajoya bikarhêner bikar tîne da ku pereyê krîptoyê bi kar tîne bişîne. Ji ber vê yekê em dikarin xebata antivirus bi tevahî têr bihesibînin.

Tenê nîvê potansiyela herî zêde ya gotarên "zindî" hebûn - 166307 perçe. Li ser yên mayî, Habr vebijarkên "rûpel kevn e, jêbirin an jî tunebû" dide. Welê, her tişt dikare bibe.

Li dû barkirina gotaran xebatên teknîkî dihatin kirin: wek nimûne, diviyabû tarîxên weşanê ji formata "'21 Kanûn 2006 di saet 10:47'an de" ji bo standard werin guhertin. datetime, û dîtinên "12,8k" - li 12800. Di vê qonaxê de, çend bûyerên din derketin holê. Ya herî xweş bi jimartina dengan û celebên daneyan ve girêdayî ye: hin postên kevin pir zêde bûn, û wan 65535 deng wergirtin.

Min çawa Habr par kir, beş 1: meyldar

Wekî encamek, nivîsarên gotaran (bê wêne) ji min re 1.5 gigabayt, şîroveyên bi agahdariya meta - 3 yên din, û bi qasî sed megabytes - agahdariya meta di derbarê gotaran de. Ev dikare bi tevahî di RAM-ê de were hilanîn, ku ji bo min surprîzek xweş bû.

Min dest bi analîzkirina gotaran ne bi nivîsan bi xwe, lê bi meta-agahdariyê kir: tarîx, etîket, navend, dîtin û "hezkirin". Derket holê ku wê jî dikare gelek tiştan bibêje.

Meylên pêşveçûna Habrahabr

Gotarên li ser malperê ji sala 2006 ve têne weşandin; herî zêde di salên 2008-2016 de.

Min çawa Habr par kir, beş 1: meyldar

Ev gotar di demên cûda de çiqas çalak hatin xwendin, ne ewqas hêsan e ku were nirxandin. Nivîsên ji 2012 û piçûktir şîrove û nirxandinên çalaktir wergirtin, lê metnên nûtir xwedî dîtin û nîşangiran in. Van metrîkan bi heman rengî tevdigerin (ew bi nîvî ketin) tenê carekê, di sala 2015-an de. Dibe ku, di rewşek qeyrana aborî û siyasî de, bala xwendevanan ji blogên IT-ê derbasî mijarên bi êştir bûye.

Min çawa Habr par kir, beş 1: meyldar

Ji xeynî gotaran bi xwe, min şîrove jî ji wan re daxist. 6 mîlyon şîrove hebûn, lê 240 hezar ji wan hatin qedexekirin ("Çalakek firî û ev nivîs li vir weşand"). Taybetmendiyek bikêr a şîroveyan ev e ku mohra wan a demê heye. Bi xwendina dema şîroveyan, hûn dikarin bi qasî têgihîştin dema ku gotar bi tevahî têne xwendin.

Derket holê ku pirraniya gotaran li cihekî ji saet 10 heta 20’an tên nivîsandin û şîrovekirin, yanî. di rojek xebatê ya Moskowê de. Dibe ku ev tê vê wateyê ku Habr ji bo mebestên pîşeyî tê xwendin, û ew rêyek baş e ku meriv di kar de paşde bixe. Bi awayê, ev dabeşkirina dema rojê ji damezrandina Hebrê heta îro sabît bûye.

Min çawa Habr par kir, beş 1: meyldar

Lêbelê, feydeya sereke ya nîşanek demjimêra şîroveyê ne dema rojê ye, lê "jiyana çalak" ya gotarê ye. Min hesab kir ku ji weşandina gotarekê heya şîroveya wê dem çawa hate belavkirin. Derket holê ku niha şîroveya navîn (xeta kesk) di nav 20 saetan de tê, yanî. Di roja yekem a piştî weşanê de, bi navînî, ji nîvê hemî şîroveyên li ser gotarekê hindiktir têne hiştin. Û di nav du rojan de, 75% ji hemî şîroveyan têne hiştin. Wekî din, gotarên berê hê zûtir hatin xwendin - mînakî, di sala 2010-an de, nîvê şîroveyan di nav 6 demjimêrên pêşîn de hatin.

Min çawa Habr par kir, beş 1: meyldar

Ji min re surprîz bû ku şîrove dirêjtir bûne: di dema hebûna Habrê de hejmara navînî ya tîpan di şîroveyekê de hema du qat zêde bûye!

Min çawa Habr par kir, beş 1: meyldar

Bersiva ku ji şîroveyan sadetir e deng e. Berevajî gelek çavkaniyên din, li ser Habré hûn dikarin ne tenê erênî, lê di heman demê de neyînî jî deynin. Lêbelê, xwendevan fersenda paşîn ew qas pir caran bikar naynin: rêjeya heyî ya ne ecibandinan bi qasî 15% ji hemî dengên hatine avêtin e. Berê zêde bû, lê bi demê re xwendevan dilnizmtir bûn.

Min çawa Habr par kir, beş 1: meyldar

Nivîs bi xwe bi demê re guherî. Mînakî, dirêjahiya tîpîk a nivîsê ji destpêka vekirina malperê ve, tevî qeyranan, bi domdarî mezinbûna xwe namîne. Di nav deh salan de, nivîs hema hema deh carî dirêj bûne!

Min çawa Habr par kir, beş 1: meyldar

Şêweya nivîsan jî (bi nêzîkatiya yekem) guherî. Di salên pêşîn ên hebûna Habrê de, wek nimûne, para kod û hejmaran di nivîsan de zêde bû:

Min çawa Habr par kir, beş 1: meyldar

Dema ku min dînamîkên gelemperî yên malperê fêm kir, min biryar da ku bipîve ka populerbûna mijarên cihêreng çawa guherî. Mijar dikarin bixweber ji nivîsan bêne nas kirin, lê ji bo destpêkê, hûn nekarin çerxê ji nû ve îcad bikin, lê etîketên amade yên ku ji hêla nivîskarên her gotarê ve hatine zêdekirin bikar bînin. Min çar meylên tîpîk li ser nexşeyê nîşan da. Mijara "Google" di destpêkê de serdest bû (dibe ku bi taybetî ji ber xweşbîniya SEO), lê her sal giraniya xwe winda kir. Javascript mijarek populer bûye û berdewam dike, lê fêrbûna makîneyê tenê di van salên dawî de zû dest bi populerbûnê kiriye. Linux di nav deh salan de wekhev têkildar dimîne.

Min çawa Habr par kir, beş 1: meyldar

Bê guman, ez eleqedar bûm ka kîjan mijar bêtir çalakiya xwendevanan dikişîne. Min ji bo her mijarê hejmara navînî ya dîtin, deng û şîroveyan hesab kir. Li vir çi qewimî:

  • Mijarên herî zêde têne dîtin: arduino, sêwirana malperê, pêşkeftina malperê, digest, girêdan, css, html, html5, nginx, algorîtmayan.
  • Mijarên herî "hezkirî": VKontakte, humor, jquery, opera, c, html, pêşveçûna malperê, html5, css, sêwirana malperê.
  • Mijarên ku herî zêde têne nîqaş kirin: opera, skype, serbixwe, VKontakte, ubuntu, kar, nokia, nginx, arduino, firefox.

Bi awayê, ji ber ku ez mijaran berhev dikim, ez dikarim wan ji hêla frekansê ve rêz bikim (û encaman bi gotara wekhev ji 2013).

  • Di salên hebûna Habr de, etîketên herî populer (bi rêza daketinê) google, android, javascript, microsoft, linux, php, apple, java, python, bername, destpêk, pêşkeftin, ios, destpêk, torên civakî ne.
  • Di sala 2017-an de, yên herî populer javascript, python, java, android, pêşkeftin, linux, c++, bernamekirin, php, c#, ios, fêrbûna makîneyê, ewlehiya agahdariyê, microsoft, reakt bûn.

Dema ku hûn van nirxan bidin ber hev, hûn dikarin, mînakî, bala xwe bidin meşa serketî ya Python û tunebûna php, an jî "kêmbûna" mijara destpêkê û bilindbûna fêrbûna makîneyê.

Hemî etîketên li ser Habré xwedan rengînek tematîkek wusa eşkere ne. Li vir, bo nimûne, bi dehan etîket hene ku tenê carekê xuya bûn, lê ji min re tenê qeşmer xuya bûn. Ji ber vê yekê: "fikir motora pêşkeftinê ye", "bootkirina ji wêneyek dîska dîskê", "dewleta Iowa", "drama", "superalesha", "makîna buharê", "roja şemiyê çi bikim", "ez Xezalek di qirikê de hebe", "û wekî her gav derket," "me nikarîbû etîketên qeşmerî derxînin." Ji bo destnîşankirina mijara gotarên weha, etîket ne bes in - hûn neçar in ku modela mijarê li ser metnên gotaran pêk bînin.

Analîzek berfirehtir ya naveroka gotaran dê di posta pêş de be. Pêşî, ez ê modelek ava bikim ku li gorî naveroka wê hejmara dîtinên gotarek pêşbînî dike. Ya duyemîn, ez dixwazim tora neuralî hîn bikim ku nivîsan bi heman şêwaza nivîskarên Habrê çêbike. Ji ber vê yekê bibin abone :)

PS Li vir yê pêça ye database.

Source: www.habr.com

Add a comment