Comments 35
А можно рейтинг полезных постов запилить? Потомк что, например, открываю JavaScript и на первом месте пост с достаточно сомнительным содержанием.
Как только вы определите количественный критерий полезности. Рейтинг — число, количество просмотров — число, количество комментариев — число. Полезность… А фиг ее знает.
Disclaimer: Подсветку, конечно, добавили, но на всякий случай — я не автор поста.
Disclaimer: Подсветку, конечно, добавили, но на всякий случай — я не автор поста.
Да, полезность действительно звучит достаточно размыто. Я имел ввиду рейтинг постов, имеющих академическую ценность.
Нет, я не понимаю минусующих — откройте и посмотрите на статьи в разделе JavaScript. Я понимаю, что рейтинг статей это круто, но такой рейтинг, как мне кажется — совсем не то, что нужно. Как минимум необходимо добавить учет свежести статей, так как технологии движутся вперед и актуальность со временем теряется, так же было бы не плохо учитывать рядом стоящие теги. В общем, рейтинг это больше, чем ранжирование по одному параметру.
Так а кто виноват, что не полезные статьи заплюсованны?
Я могу доказать, что на заплюсованность статьи ее содержание может влиять слабо. Вчера был праздник на хабре было 10 человек, завтра — рабочий день — в онлайне 100 человек. Как вы считаете: когда у статьи будет больше плюсов?
Я лишь хочу, чтобы рейтинг был качественней, не по одному параметру так сказать.
Я лишь хочу, чтобы рейтинг был качественней, не по одному параметру так сказать.
Можно по количеству добавлений в избранное. Странно, что я раньше об этом не подумал!
на первом месте пост с достаточно сомнительным содержанием? вы что пропустили хабраистерику? :)
Это вы вовремя пост оформили — сегодня я просто не высплюсь. Найди я его (или он меня) завтра, и среда стала бы пятницей (сужу по количеству открытых вкладок — некоторые прочитать, некоторые просто освежить в памяти)…
Неожиданно обнаружила свои посты в топе целых двух хабов. Кажется, впервые за все такие рейтинги. Приятно!
Ваш пост унес меня в страну занимательного чтения топовых постов хабов, которые я пропустил… некоторые даже перечитал.
Спасибо, мил человек.
Спасибо, мил человек.
А где же электронная коммерция? Добавьте этот хаб плиз, если есть возможность.
Как-то странно. В DIY у вас на первом месте пост с рейтингом 603 вместо этого поста, у которого рейтинг 1448. В CSS на первом месте должен быть пост про цикад. "Прекратите скручивать!" попал в топ «Электроники для начинающих», но умудрился избежать топа «DIY».
Я к сожалению сейчас не могу объяснить почему топовые пост про монитор и «цикад» не попали в соответствующие топы. Вечером приду и разберусь.
А пост про провода в топе DIY.
А пост про провода в топе DIY.
Действительно, в моих таблицах нету статей ни про цикад, ни про «приватный монитор». Спасибо, что заметили.
Решение проблемы
Посты парсятся по классу «posts shortcuts_items», но это не единственный возможный вариант представления поста на странице. Оказывается есть ещё и «post translation shortcuts_item», и, быть может, другие.

Но это решается очень просто — убираем конкретику из xpath-запроса, и всё парсится как надо:
Вот так бывает, хотел перестраховаться, a упустил целый класс статей!

Но это решается очень просто — убираем конкретику из xpath-запроса, и всё парсится как надо:
for elem in grab.doc.select('//div[@class="posts shortcuts_items"]/div'):
post_url = elem.node.find('h1[@class="title"]/a').get('href')
...
Вот так бывает, хотел перестраховаться, a упустил целый класс статей!
По заголовку показалось, что вы посчитаете средний рейтинг постов каждого хаба. Хотел посчитать его на основе вашей базы данных, но ее структура меня очень расстроила. Я ожидал, что будет таблица хабов и таблица постов (с указанием id хаба для каждого поста). А у вас почему-то отдельная таблица для каждого хаба. Нормально работать с этим невозможно. Но я упорный, поэтому вот результаты. В скобках указан средний рейтинг поста.
Хабы с самыми успешными постами: cases (86), it_bigraphy (79), diy (76), easyelectronics (73), announcements (72), iconoskaz (72), i2p (72), asm (69), dura_lex (68), antikvariat (64), data_visualization (64), ebay (63), freelance (62), history (61), videocards (61).
Хабы с самыми заминусованными постами: joomla (2), cubrid (2), cakephp (5), bitrix (5), ms_access (6), sup_fabrik (6), sharepoint (6), azure (8), mssql (8), doctrine (8), derbyjs (9), bada_dev (9), crm (9), asterisk (10), begun (10).
Хабы с самыми успешными постами: cases (86), it_bigraphy (79), diy (76), easyelectronics (73), announcements (72), iconoskaz (72), i2p (72), asm (69), dura_lex (68), antikvariat (64), data_visualization (64), ebay (63), freelance (62), history (61), videocards (61).
Хабы с самыми заминусованными постами: joomla (2), cubrid (2), cakephp (5), bitrix (5), ms_access (6), sup_fabrik (6), sharepoint (6), azure (8), mssql (8), doctrine (8), derbyjs (9), bada_dev (9), crm (9), asterisk (10), begun (10).
Ого, пищи для ума прибыло!
Спасибо! Пропал рабочий день. )
На мой взгляд, использовать значение
Поэтому в качестве score лучше использовать нижнюю границу доверительного интервала для значения Уилсона. Подобный алгоритм используется для сортировки комментариев в реддите. Подробнее можно почитать тут:
Reddit’s comment ranking algorithm
Еще можно воспользоваться алгоритмом ранжирования для Hacker News:
How Hacker News ranking algorithm works
Но мне кажется он тут не очень уместен. Код с учетом изменений можно найти тут.
Результаты для JavaScript выглядят так:
количество плюсов - количество минусов
в качестве score не очень хорошо. Яркий пример: «хорошесть» статьи у которой 100 плюсов и 91 минус не равна «хорошести» статьи у которой 10 плюсов и 1 минус. Поэтому в качестве score лучше использовать нижнюю границу доверительного интервала для значения Уилсона. Подобный алгоритм используется для сортировки комментариев в реддите. Подробнее можно почитать тут:
Reddit’s comment ranking algorithm
Еще можно воспользоваться алгоритмом ранжирования для Hacker News:
How Hacker News ranking algorithm works
Но мне кажется он тут не очень уместен. Код с учетом изменений можно найти тут.
Результаты для JavaScript выглядят так:
JavaScript
Range, TextRange и Selection 0.972589869273
Verlet.js — физический движок на основе метода Верле 0.966886801027
Yaxy — proxy-сервер для веб-разработчика 0.966259530688
HTML и SVG: создаём интерактивную карту 0.965624633108
OCR и нейронная сеть на Javascript 0.964728338768
Ovation. Таблица аккордов своими руками с помощью JS и HTML5 0.961735221216
Замыкания и объекты JavaScript. Переизобретаем интерпретатор 0.961639697873
Путь JavaScript модуля 0.960745853351
Эффектная анимация разрушения (Pixel Dust) на JavaScript 0.958438712625
Работа с объектами в JavaScript: теория и практика 0.958049764164
Verlet.js — физический движок на основе метода Верле 0.966886801027
Yaxy — proxy-сервер для веб-разработчика 0.966259530688
HTML и SVG: создаём интерактивную карту 0.965624633108
OCR и нейронная сеть на Javascript 0.964728338768
Ovation. Таблица аккордов своими руками с помощью JS и HTML5 0.961735221216
Замыкания и объекты JavaScript. Переизобретаем интерпретатор 0.961639697873
Путь JavaScript модуля 0.960745853351
Эффектная анимация разрушения (Pixel Dust) на JavaScript 0.958438712625
Работа с объектами в JavaScript: теория и практика 0.958049764164
Изумительно.
Было бы хорошо добавить фильтрацию по времени. И в таком варианте эту «фичу» можно добавлять на сам Хабр.
Было бы хорошо добавить фильтрацию по времени. И в таком варианте эту «фичу» можно добавлять на сам Хабр.
Автор, спасибо большое за проделанную работу! Уже есть что почитать, но если допилить, вообще цены не будет!
Не увидел хаб GTD
Чувствую, скоро придется поправлять список по категории pyhton :)
UPD4: функционал запилили на хабр!
Sign up to leave a comment.
Рейтинг постов хаба