میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

جب نئے سال کا اولیویئر ختم ہو گیا، میرے پاس کرنے کے لیے کچھ نہیں تھا، اور میں نے فیصلہ کیا کہ ہبراہبر (اور متعلقہ پلیٹ فارمز) سے تمام مضامین کو اپنے کمپیوٹر پر ڈاؤن لوڈ کر کے دریافت کروں۔

کئی دلچسپ کہانیاں تھیں۔ ان میں سے پہلی سائٹ کے وجود کے 12 سالوں کے دوران مضامین کی شکل اور موضوعات کی ترقی ہے۔ مثال کے طور پر، کچھ عنوانات کی حرکیات کافی اشارے کرتی ہیں۔ تسلسل - کٹ کے نیچے.

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

تجزیہ کا عمل

یہ سمجھنے کے لیے کہ حبر نے کس طرح ترقی کی، اس کے تمام مضامین کا جائزہ لینا اور ان سے میٹا معلومات (مثال کے طور پر، تاریخیں) نکالنا ضروری تھا۔ بائی پاس آسان تھا، کیونکہ تمام مضامین کے لنکس "habrahabr.ru/post/337722/" کی طرح نظر آتے ہیں، اور نمبر سختی سے ترتیب سے دیے گئے ہیں۔ یہ جانتے ہوئے کہ آخری پوسٹ کی تعداد 350 ہزار سے تھوڑی کم ہے، میں نے صرف ایک لوپ (ازگر کوڈ) میں تمام ممکنہ دستاویز کی شناخت کی:

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

فنکشن download_document صفحہ کو متعلقہ آئی ڈی کے ساتھ لوڈ کرنے کی کوشش کرتا ہے اور HTML ڈھانچے سے بامعنی معلومات نکالنے کی کوشش کرتا ہے۔

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)

تجزیہ کرنے کے عمل میں، میں نے کئی نئی چیزیں دریافت کیں۔

سب سے پہلے، وہ کہتے ہیں کہ پروسیسر میں کور سے زیادہ پروسیس بنانا بیکار ہے۔ لیکن میرے معاملے میں، یہ پتہ چلا کہ محدود وسائل پروسیسر نہیں ہے، لیکن نیٹ ورک، اور 100 عمل 4 یا 20 سے زیادہ تیزی سے کام کرتے ہیں.

دوسری بات یہ کہ کچھ پوسٹس میں خاص حروف کے مجموعے تھے - مثال کے طور پر، "%&#@" جیسے خوشامد۔ یہ پتہ چلا کہ html.parser، جسے میں نے پہلے استعمال کیا، مجموعہ پر ردعمل ظاہر کرتا ہے۔ &# دردناک طور پر، اسے ایچ ٹی ایم ایل ہستی کے آغاز پر غور کرنا۔ میں پہلے ہی کالا جادو کرنے جا رہا تھا، لیکن فورم نے مشورہ دیا کہ آپ صرف پارسر تبدیل کر سکتے ہیں۔

تیسرا، میں تین کے علاوہ تمام اشاعتیں اتارنے میں کامیاب رہا۔ میرے اینٹی وائرس کے ذریعے 65927، 162075، اور 275987 نمبر والے دستاویزات کو فوری طور پر حذف کر دیا گیا۔ یہ بالترتیب ایک جاوا اسکرپٹ چین کے بارے میں مضامین ہیں جو ایک بدنیتی پر مبنی پی ڈی ایف ڈاؤن لوڈ کرتی ہے، براؤزر پلگ ان کے ایک سیٹ کی شکل میں SMS رینسم ویئر، اور CrashSafari.com سائٹ جو iPhones کو ریبوٹ میں بھیجتی ہے۔ اینٹیوائرس نے بعد میں ایک اور مضمون دریافت کیا، سسٹم اسکین کے دوران: پالتو جانوروں کی دکان کی ویب سائٹ پر اسکرپٹ کے بارے میں 338586 پوسٹ کریں جو صارف کے پروسیسر کو کریپٹو کرنسی کی کھدائی کے لیے استعمال کرتی ہے۔ لہذا ہم غور کر سکتے ہیں کہ اینٹی وائرس کا کام کافی ہے۔

"لائیو" مضامین ممکنہ زیادہ سے زیادہ کا صرف نصف نکلے - 166307 ٹکڑے۔ باقی کے بارے میں، Habr اختیارات دیتا ہے "صفحہ پرانا ہے، حذف کر دیا گیا ہے یا بالکل موجود نہیں ہے۔" ویسے کچھ بھی ہو سکتا ہے۔

مضامین کو اپ لوڈ کرنے کے بعد تکنیکی کام کیا گیا: مثال کے طور پر، اشاعت کی تاریخوں کو "21 دسمبر 2006 صبح 10:47 بجے" کی شکل سے معیاری میں تبدیل کرنا پڑا۔ datetime، اور "12,8k" آراء - 12800 میں۔ اس مرحلے پر، چند اور واقعات سامنے آئے۔ ووٹوں کی گنتی اور ڈیٹا کی اقسام کے ساتھ سب سے مزے کا تعلق ہے: کچھ پرانی پوسٹس میں int اوور فلو تھا اور ہر ایک کو 65535 ووٹ ملے۔

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

نتیجے کے طور پر، مضامین کے متن (تصویر کے بغیر) نے مجھے 1.5 گیگا بائٹس، میٹا معلومات کے ساتھ تبصرے - ایک اور 3، اور تقریبا ایک سو میگا بائٹس - مضامین کے بارے میں میٹا معلومات. اسے مکمل طور پر RAM میں رکھا جا سکتا ہے جو کہ میرے لیے ایک خوشگوار حیرت کی بات تھی۔

میں نے مضامین کا تجزیہ خود متن سے نہیں بلکہ میٹا انفارمیشن سے شروع کیا: تاریخیں، ٹیگ، حب، آراء اور پسند۔ پتہ چلا کہ وہ بہت کچھ بتا سکتی ہے۔

Habrahabr ترقی کے رجحانات

سائٹ پر مضامین 2006 سے شائع ہو رہے ہیں۔ سب سے زیادہ شدت سے - 2008-2016 میں۔

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

مختلف اوقات میں ان مضامین کو کس قدر فعال طور پر پڑھا گیا اس کا اندازہ لگانا اتنا آسان نہیں ہے۔ 2012 اور اس سے کم عمر کے متن کو زیادہ تبصرے اور درجہ بندی ملے، لیکن نئے متن کو زیادہ ملاحظات اور بک مارکس ملے۔ ان میٹرکس نے 2015 میں صرف ایک بار اسی طرح برتاؤ کیا (آدھی)۔ شاید معاشی اور سیاسی بحران کی صورت حال میں قارئین کی توجہ آئی ٹی بلاگز سے زیادہ تکلیف دہ مسائل کی طرف مبذول ہو گئی ہے۔

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

خود مضامین کے علاوہ، میں نے ان پر مزید تبصرے ڈاؤن لوڈ کیے ہیں۔ 6 ملین تبصرے تھے، تاہم، ان میں سے 240 ہزار پر پابندی لگا دی گئی تھی ("یو ایف او نے اڑ کر یہ نوشتہ یہاں شائع کیا")۔ تبصروں کی ایک مفید خصوصیت یہ ہے کہ ان پر ٹائم اسٹیمپ ہوتا ہے۔ تبصرے کے وقت کا مطالعہ کرنے سے، آپ تقریباً سمجھ سکتے ہیں کہ مضامین کب پڑھے جاتے ہیں۔

معلوم ہوا کہ زیادہ تر مضامین صبح 10 بجے سے رات 20 بجے تک لکھے اور تبصرہ کیے جاتے ہیں، یعنی۔ ماسکو کے ایک عام کام کے دن پر۔ اس کا مطلب یہ ہو سکتا ہے کہ حبر کو پیشہ ورانہ مقاصد کے لیے پڑھا جاتا ہے، اور یہ کام میں تاخیر کرنے کا ایک اچھا طریقہ ہے۔ ویسے دن کے وقت کی یہ تقسیم حبر کی بنیاد سے لے کر آج تک مستحکم ہے۔

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

تاہم، تبصرے کے ٹائم اسٹیمپ کا بنیادی فائدہ دن کا وقت نہیں ہے، بلکہ مضمون کی "فعال زندگی" کا دورانیہ ہے۔ میں نے حساب لگایا کہ مضمون کی اشاعت سے لے کر تبصرے تک وقت کیسے تقسیم ہوتا ہے۔ معلوم ہوا کہ اب درمیانی تبصرہ (گرین لائن) تقریباً 20 گھنٹے میں آتا ہے، یعنی اشاعت کے بعد پہلے دن، اوسطا، مضمون پر تمام تبصروں میں سے آدھے سے کچھ زیادہ رہ گئے ہیں۔ اور دو دن میں وہ تمام تبصروں کا 75% چھوڑ دیتے ہیں۔ ایک ہی وقت میں، پہلے کے مضامین اور بھی تیزی سے پڑھے جاتے تھے - مثال کے طور پر، 2010 میں، نصف تبصرے پہلے 6 گھنٹوں میں آئے تھے۔

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

یہ میرے لیے حیرت کی بات ہے کہ تبصرے لمبے ہو گئے ہیں: حبر کی زندگی کے دوران ایک تبصرے میں حروف کی اوسط تعداد تقریباً دوگنی ہو گئی ہے!

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

کمنٹس سے زیادہ آسان فیڈ بیک ووٹ ہیں۔ بہت سے دوسرے وسائل کے برعکس، Habré پر آپ نہ صرف پلس، بلکہ مائنس بھی ڈال سکتے ہیں۔ تاہم، قارئین آخری موقع کو اتنی کثرت سے استعمال نہیں کرتے: ناپسندیدگی کا موجودہ حصہ ڈالے گئے تمام ووٹوں کا تقریباً 15% ہے۔ پہلے زیادہ ہوتے تھے لیکن وقت کے ساتھ ساتھ قارئین بھی مہربان ہوتے گئے ہیں۔

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

نصوص خود وقت کے ساتھ بدل گئے ہیں۔ مثال کے طور پر، متن کی عام لمبائی بحرانوں کے باوجود، سائٹ کے آغاز سے ہی مسلسل بڑھنا بند نہیں کرتی ہے۔ ایک دہائی میں، نصوص تقریباً دس گنا طویل ہو گئے ہیں!

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

نصوص کا انداز (پہلے اندازے تک) بھی بدل گیا۔ حبر کے وجود کے پہلے سالوں کے دوران، مثال کے طور پر، نصوص میں کوڈ اور نمبروں کا حصہ بڑھ گیا:

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

سائٹ کی مجموعی حرکیات کو سمجھنے کے بعد، میں نے اس بات کی پیمائش کرنے کا فیصلہ کیا کہ مختلف عنوانات کی مقبولیت میں تبدیلی کیسے آئی۔ متن سے عنوانات کا انتخاب خود بخود کیا جا سکتا ہے، لیکن شروع کرنے والوں کے لیے، آپ پہیے کو دوبارہ نہیں بنا سکتے، لیکن ہر مضمون کے مصنفین کے چسپاں ریڈی میڈ ٹیگز استعمال کریں۔ میں نے چارٹ پر چار عام رجحانات بنائے ہیں۔ "گوگل" تھیم نے ابتدا میں غلبہ حاصل کیا (شاید بنیادی طور پر SEO کی وجہ سے)، لیکن گزشتہ برسوں سے اس کا وزن کم ہو رہا ہے۔ جاوا اسکرپٹ ایک مقبول موضوع رہا ہے اور آہستہ آہستہ بڑھ رہا ہے، لیکن مشین لرننگ صرف حالیہ برسوں میں تیزی سے مقبولیت حاصل کرنا شروع ہوئی ہے۔ دوسری طرف، لینکس پوری دہائی میں یکساں طور پر متعلقہ رہا ہے۔

میں نے حبر کو کیسے پارس کیا، حصہ 1: رجحانات

یقیناً، میں اس بات میں دلچسپی لینے لگا کہ کون سے موضوعات قارئین کی زیادہ سرگرمی کو اپنی طرف متوجہ کرتے ہیں۔ میں نے ہر موضوع میں آراء، ووٹوں اور تبصروں کی اوسط تعداد کا حساب لگایا۔ یہاں کیا ہوا ہے:

  • سب سے زیادہ دیکھے جانے والے عنوانات: arduino، ویب ڈیزائن، ویب ڈویلپمنٹ، ڈائجسٹ، لنکس، css، html، html5، nginx، الگورتھم۔
  • سب سے زیادہ "پسند" عنوانات: vkontakte, humor, jquery, opera, c, html, web Development, html5, css, web design.
  • سب سے زیادہ زیر بحث موضوعات: opera, skype, freelance, vkontakte, ubuntu, work, nokia, nginx, arduino, firefox.

ویسے، چونکہ میں عنوانات کا موازنہ کر رہا ہوں، آپ انہیں تعدد کے لحاظ سے درجہ بندی کر سکتے ہیں (اور نتائج کا موازنہ 2013 سے ملتا جلتا مضمون).

  • ہیبر کے وجود کے تمام سالوں کے لیے، سب سے زیادہ مقبول ٹیگز (نزولی ترتیب میں) گوگل، اینڈرائیڈ، جاوا اسکرپٹ، مائیکرو سافٹ، لینکس، پی ایچ پی، ایپل، جاوا، پائتھون، پروگرامنگ، اسٹارٹ اپس، ڈیولپمنٹ، آئی او ایس، اسٹارٹ اپ، سوشل نیٹ ورکس ہیں۔
  • 2017 میں، جاوا اسکرپٹ، پائتھون، جاوا، اینڈرائیڈ، ڈویلپمنٹ، لینکس، سی++، پروگرامنگ، پی ایچ پی، سی#، آئی او ایس، مشین لرننگ، انفارمیشن سیکیورٹی، مائیکرو سافٹ، ری ایکٹ سب سے زیادہ مقبول تھے۔

ان درجہ بندیوں کا موازنہ کرتے وقت، کوئی توجہ دے سکتا ہے، مثال کے طور پر، Python کے فاتح مارچ اور php کے ختم ہونے پر، یا اسٹارٹ اپ موضوعات کے "غروب آفتاب" اور مشین لرننگ کے عروج پر۔

Habré کے تمام ٹیگز میں اس طرح کی واضح موضوعاتی رنگت نہیں ہے۔ مثال کے طور پر، یہاں درجن بھر ٹیگز ہیں جو صرف ایک بار ملے تھے، لیکن مجھے صرف مضحکہ خیز لگے۔ تو: "آئیڈیا ترقی کی محرک قوت ہے"، "فلاپی ڈسک امیج سے بوٹ"، "آئیووا اسٹیٹ"، "ڈرامہ"، "سپرالیش"، "سٹیم انجن"، "ہفتے کو کرنے کی چیزیں"، "میرے پاس ہے گوشت کی چکی میں لومڑی، "ایک یہ ہمیشہ کی طرح نکلا"، "ہم مضحکہ خیز ٹیگز کے ساتھ نہیں آ سکے"۔ اس طرح کے مضامین کے موضوع کا تعین کرنے کے لیے، ٹیگز کافی نہیں ہیں - آپ کو مضامین کے متن پر موضوعاتی ماڈلنگ کرنا ہوگی۔

مضامین کے مواد کا مزید تفصیلی تجزیہ اگلی پوسٹ میں کیا جائے گا۔ سب سے پہلے، میں ایک ایسا ماڈل بنانے جا رہا ہوں جو مضمون کے مواد کی بنیاد پر صفحہ کے ملاحظات کی تعداد کی پیش گوئی کرتا ہے۔ دوم، میں نیورل نیٹ ورک کو اسی انداز میں متن تیار کرنا سکھانا چاہتا ہوں جس طرح حبر کے مصنفین ہیں۔ تو سبسکرائب کریں 🙂

PS اور یہاں بیپ بج رہی ہے۔ ڈیٹاسیٹ.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں