Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Tết Olivier xong, không có việc gì làm, tôi quyết định tải tất cả các bài báo từ Habrahabr (và các nền tảng liên quan) về máy tính và khám phá.

Có một số câu chuyện thú vị. Đầu tiên trong số đó là sự phát triển của định dạng và chủ đề của các bài báo trong 12 năm tồn tại của trang web. Ví dụ, tính năng động của một số chủ đề là khá rõ ràng. Tiếp tục - dưới sự cắt giảm.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

quá trình phân tích cú pháp

Để hiểu Habr đã phát triển như thế nào, cần phải xem qua tất cả các bài báo của anh ấy và trích xuất siêu thông tin từ chúng (ví dụ: ngày tháng). Việc bỏ qua rất dễ dàng vì các liên kết đến tất cả các bài báo trông giống như "habrahabr.ru/post/337722/" và các số được đưa ra theo thứ tự nghiêm ngặt. Biết rằng bài đăng cuối cùng có số lượng nhỏ hơn 350 nghìn một chút, tôi chỉ xem qua tất cả id tài liệu có thể trong một vòng lặp (mã Python):

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

Chức năng download_document cố tải trang có id tương ứng và cố trích xuất thông tin có ý nghĩa từ cấu trúc 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)

Trong quá trình phân tích cú pháp, tôi phát hiện ra một số điều mới.

Đầu tiên, họ nói rằng việc tạo ra nhiều quy trình hơn số lõi trong bộ xử lý là vô ích. Nhưng trong trường hợp của tôi, hóa ra tài nguyên giới hạn không phải là bộ xử lý mà là mạng và 100 quy trình hoạt động nhanh hơn 4 hoặc giả sử là 20.

Thứ hai, trong một số bài đăng có sự kết hợp của các ký tự đặc biệt - ví dụ: cách nói uyển chuyển như "%&#@". Hóa ra nó như thế này html.parser, mà tôi đã sử dụng đầu tiên, phản ứng với sự kết hợp &# một cách đau đớn, coi đó là sự khởi đầu của thực thể html. Tôi đã định thực hiện ma thuật đen, nhưng diễn đàn gợi ý rằng bạn chỉ cần thay đổi trình phân tích cú pháp.

Thứ ba, tôi quản lý để dỡ tất cả các ấn phẩm, ngoại trừ ba ấn phẩm. Các tài liệu được đánh số 65927, 162075 và 275987 đã bị phần mềm chống vi-rút của tôi xóa ngay lập tức. Đây là những bài viết tương ứng về một chuỗi javascript tải xuống một tệp pdf độc hại, phần mềm tống tiền SMS dưới dạng một bộ plugin trình duyệt và trang web CrashSafari.com khiến iPhone phải khởi động lại. Antivirus đã phát hiện ra một bài viết khác sau đó, trong quá trình quét hệ thống: bài đăng 338586 về các tập lệnh trên trang web cửa hàng thú cưng sử dụng bộ xử lý của người dùng để khai thác tiền điện tử. Vì vậy, chúng ta có thể coi công việc của phần mềm chống vi-rút là khá đầy đủ.

Các bài báo "Trực tiếp" hóa ra chỉ bằng một nửa so với mức tối đa tiềm năng - 166307 bài viết. Về phần còn lại, Habr đưa ra các tùy chọn "trang đã lỗi thời, đã bị xóa hoặc hoàn toàn không tồn tại." Vâng, bất cứ điều gì có thể xảy ra.

Việc tải lên các bài báo được theo sau bởi công việc kỹ thuật: ví dụ: ngày xuất bản phải được chuyển đổi từ định dạng "'21 tháng 2006 năm 10 lúc 47:XNUMX sáng" thành tiêu chuẩn datetime, và "12,8k" lượt xem - vào năm 12800. Ở giai đoạn này, một số sự cố khác đã xảy ra. Điều thú vị nhất liên quan đến số phiếu bầu và loại dữ liệu: một số bài đăng cũ bị tràn int và nhận được 65535 phiếu bầu cho mỗi bài.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Kết quả là, văn bản của các bài báo (không có hình ảnh) đã tiêu tốn của tôi 1.5 gigabyte, các bình luận có siêu thông tin - 3 người khác và khoảng một trăm megabyte - siêu thông tin về các bài báo. Điều này hoàn toàn có thể được giữ trong RAM, đó là một bất ngờ thú vị đối với tôi.

Tôi bắt đầu phân tích các bài báo không phải từ chính văn bản mà từ siêu thông tin: ngày tháng, thẻ, trung tâm, lượt xem và lượt thích. Hóa ra cô ấy có thể nói rất nhiều.

Xu hướng phát triển Habrahabr

Các bài báo trên trang đã được xuất bản từ năm 2006; mạnh mẽ nhất - trong 2008-2016.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Việc những bài báo này được đọc tích cực như thế nào vào những thời điểm khác nhau là điều không dễ đánh giá. Các văn bản từ năm 2012 trở xuống nhận được nhiều nhận xét và xếp hạng hơn, nhưng các văn bản mới hơn có nhiều lượt xem và dấu trang hơn. Các số liệu này hoạt động theo cùng một cách (giảm một nửa) chỉ một lần vào năm 2015. Có lẽ, trong tình hình khủng hoảng kinh tế và chính trị, sự quan tâm của độc giả đã chuyển từ các blog IT sang các vấn đề nhức nhối hơn.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Ngoài các bài báo, tôi đã tải xuống nhiều bình luận hơn cho họ. Đã có 6 triệu bình luận, tuy nhiên, 240 nghìn bình luận trong số đó đã bị cấm ("một UFO đã bay vào và xuất bản dòng chữ này ở đây"). Một thuộc tính hữu ích của các nhận xét là chúng có dấu thời gian. Bằng cách nghiên cứu thời gian của các bình luận, bạn có thể hiểu đại khái khi các bài báo được đọc.

Hóa ra hầu hết các bài viết đều được viết và bình luận ở đâu đó từ 10 giờ sáng đến 20 giờ tối, tức là. vào một ngày làm việc điển hình của Moscow. Điều này có thể có nghĩa là Habr được đọc vì mục đích nghề nghiệp và đây là một cách tốt để trì hoãn công việc. Nhân tiện, sự phân bố thời gian trong ngày này ổn định từ khi thành lập Habr cho đến ngày nay.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Tuy nhiên, lợi ích chính của dấu thời gian nhận xét không phải là thời gian trong ngày, mà là thời lượng "thời gian hoạt động" của bài viết. Tôi đã tính toán thời gian được phân phối như thế nào từ việc xuất bản bài báo đến nhận xét của nó. Hóa ra là bây giờ nhận xét trung bình (đường màu xanh lá cây) sẽ xuất hiện sau khoảng 20 giờ, tức là vào ngày đầu tiên sau khi xuất bản, trung bình, hơn một nửa số bình luận về bài báo được để lại. Và trong hai ngày, họ để lại 75% tổng số bình luận. Đồng thời, các bài viết trước đó thậm chí còn được đọc nhanh hơn - ví dụ, vào năm 2010, một nửa số bình luận đến trong 6 giờ đầu tiên.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Tôi ngạc nhiên là các bình luận đã dài ra: số ký tự trung bình trong một bình luận đã tăng gần gấp đôi trong suốt thời gian tồn tại của Habr!

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Phản hồi dễ dàng hơn bình luận là phiếu bầu. Không giống như nhiều tài nguyên khác, trên Habré, bạn không chỉ có thể đưa ra những điểm cộng mà còn cả những điểm trừ. Tuy nhiên, độc giả không sử dụng cơ hội cuối cùng thường xuyên như vậy: tỷ lệ không thích hiện tại là khoảng 15% tổng số phiếu bầu. Đã từng có nhiều hơn, nhưng theo thời gian, độc giả đã trở nên tử tế hơn.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Bản thân các văn bản đã thay đổi theo thời gian. Ví dụ: độ dài điển hình của văn bản không ngừng tăng đều đặn ngay từ khi ra mắt trang web, bất chấp các cuộc khủng hoảng. Trong một thập kỷ, các văn bản đã dài hơn gần mười lần!

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Phong cách của các văn bản (theo cách gần đúng đầu tiên) cũng thay đổi. Ví dụ, trong những năm đầu tiên Habr tồn tại, tỷ lệ mã và số trong các văn bản đã tăng lên:

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Sau khi hiểu được động lực tổng thể của trang web, tôi quyết định đo mức độ phổ biến của các chủ đề khác nhau đã thay đổi như thế nào. Các chủ đề có thể được chọn tự động từ các văn bản, nhưng đối với những người mới bắt đầu, bạn không thể phát minh lại bánh xe mà hãy sử dụng các thẻ tạo sẵn do tác giả của mỗi bài viết gắn vào. Tôi đã vẽ bốn xu hướng tiêu biểu trên biểu đồ. Chủ đề "Google" ban đầu chiếm ưu thế (có lẽ chủ yếu là do SEO), nhưng đã giảm dần trong những năm qua. Javascript đã là một chủ đề phổ biến và tiếp tục phát triển chậm, nhưng máy học đã bắt đầu nhanh chóng trở nên phổ biến chỉ trong những năm gần đây. Mặt khác, Linux vẫn có liên quan như nhau trong suốt thập kỷ.

Cách tôi phân tích cú pháp Habr, phần 1: xu hướng

Tất nhiên, tôi bắt đầu quan tâm đến chủ đề nào thu hút nhiều hoạt động của độc giả hơn. Tôi đã tính số lượt xem, bình chọn và bình luận trung bình trong mỗi chủ đề. Đây là những gì đã xảy ra:

  • Các chủ đề được xem nhiều nhất: arduino, thiết kế web, phát triển web, thông báo, liên kết, css, html, html5, nginx, thuật toán.
  • Các chủ đề được "thích" nhất: vkontakte, hài hước, jquery, opera, c, html, phát triển web, html5, css, thiết kế web.
  • Các chủ đề được thảo luận nhiều nhất: opera, skype, freelance, vkontakte, ubuntu, work, nokia, nginx, arduino, firefox.

Nhân tiện, vì tôi đang so sánh các chủ đề nên bạn có thể xếp hạng chúng theo tần suất (và so sánh kết quả với bài viết tương tự từ năm 2013).

  • Trong suốt những năm tồn tại của Habr, các thẻ phổ biến nhất (theo thứ tự giảm dần) là google, android, javascript, microsoft, linux, php, apple, java, python, programming, startups, development, ios, startup, social network
  • Trong năm 2017, phổ biến nhất là javascript, python, java, android, development, linux, c++, programming, php, c#, ios, machine learning, information security, microsoft, react

Ví dụ, khi so sánh các xếp hạng này, người ta có thể chú ý đến cuộc diễu hành thắng lợi của Python và sự tuyệt chủng của php hoặc "hoàng hôn" của các chủ đề khởi động và sự trỗi dậy của máy học.

Không phải tất cả các thẻ trên Habré đều có màu chủ đề rõ ràng như vậy. Ví dụ: đây là hàng chục thẻ chỉ gặp một lần nhưng đối với tôi có vẻ buồn cười. Vì vậy: "ý tưởng là động lực của sự tiến bộ", "khởi động từ hình ảnh đĩa mềm", "Bang Iowa", "kịch", "siêu nhân", "động cơ hơi nước", "những việc cần làm vào thứ Bảy", "Tôi có một con cáo trong máy xay thịt", "hóa ra vẫn như mọi khi", "chúng tôi không thể nghĩ ra những thẻ hài hước". Để xác định chủ đề của các bài báo như vậy, các thẻ là không đủ - bạn sẽ phải thực hiện mô hình theo chủ đề trên các văn bản của bài báo.

Phân tích chi tiết hơn về nội dung các bài viết sẽ có trong bài tiếp theo. Đầu tiên, tôi sẽ xây dựng một mô hình dự đoán số lượt xem trang cho một bài báo dựa trên nội dung của nó. Thứ hai, tôi muốn dạy mạng nơ-ron tạo văn bản theo phong cách giống như các tác giả của Habr. Vì vậy, đăng ký 🙂

PS Và đây là tiếng bíp tập dữ liệu.

Nguồn: www.habr.com

Thêm một lời nhận xét