Рейтинг блогосферы - пост 5 (алгоритм сортировки)

За прошедшую неделю я успел пообщаться с нашим патентным ведомством, которое сказало мне, что алгоритмы не патентуют, патентуют готовые прототипы. Предложили подогнать мою заявку под "Программу для базы данных для ЭВМ", но я не стал тратить время. Таким образом продолжаю серию постов, кратко рассказывающих как формируется ТОП30.
Содержание уже опубликованных заметок



Сегодня я приведу алгоритм первичной сортировки и объясню некоторые моменты. Если Вы читали предыдущие заметки, то должны знать, что алгоритм первичной сортировки нужен только для того, чтобы выбрать порядок в котором записи будут анализироваться на предмет прохождения через фильтры. Собственно сам package первичной сортировки:

Copy Source | Copy HTML
  1. -- 3) проставляем максимумы
  2. CALL top_setmaxs();
  3.  
  4. select *,top_doubles(temp.linkto) as dd
  5.  from (
  6. select
  7. d.linkto, d.blogtype,d.blogname,d.title, d.body,d.short,d.comments,d.links,d.when,
  8. (
  9.     if((select count(*) from top_rawdata where blogname=d.blogname)>20,0,1)*
  10.     (
  11.         d.visits24/m.visits24 + d.links/m.links +
  12.         if(d.blogtype='YaRu',if(d.commenters>d.links,d.commenters-d.links,0),d.commenters)/m.commenters +
  13.         if(d.blogtype='YaRu',if(d.comments>d.links,d.comments-d.links,0),d.comments)/m.comments
  14.     )
  15.     *(select 1-(top_daysinheap(d.blogname)-1)/20 from dual)
  16.     *if(isnull(h.atyear),1,1-h.atyear/500)
  17. )
  18. as value
  19. from top_rawdata d
  20. inner join top_maxs m on (m.blogtype=d.blogtype and m.community=d.community)
  21. left join top_intop t on t.blogname=d.blogname -- убедимся что не в топе!
  22. left join top_intheme b on b.blogname=d.blogname -- убедимся что не в бане
  23. left join arme_top_users h on h.blogname=d.blogname
  24.     where short!=''
  25.     and b.themeid is null
  26.     and t.when is null
  27.     and baned='0'
  28.     and (((d.visits24>0 or d.blogtype!='BlogsMail') and (d.links>0 or d.blogtype='Livejournal') and d.commenters>0)) -- краевое условие снизу
  29.     and d.when>DATE_SUB(NOW(),interval 3 day) -- бесполезно, но пусть будет
  30.     and m.count > 10 -- больше 10 постов в группе, иначе нет выбора.
  31.     and ((d.visits24/m.visits24)/ (d.links/m.links +
  32.         if(d.blogtype='YaRu',if(d.commenters>d.links,d.commenters-d.links,0),d.commenters)/m.commenters +
  33.         if(d.blogtype='YaRu',if(d.comments>d.links,d.comments-d.links,0),d.comments)/m.comments) < 3)
  34. ) temp
  35. order by temp.value desc limit 20;
  36.  


Вначале (на строчке 2) считаются максимумы (+1 чтобы не было нулей) для текущего состояния ТОПа, сгруппировано по типу платформы и по личный блог или сообщество. Далее на строчках 9-17 считается value, которая и характеризует сравнение проекций на единичный вектор. Почему суммы, а не квадратуры, как это должно было быть, если бы я чисто сравнивал проекции - доказывается просто. Сравнение знакопостоянных функций равносильно сравнению интегралов от производных по одинаковому промежутку времени. Далее, так как я беру параметры за все время существования записи, то в начальный момент значение подъинтегральной функций равно нулю и остается сравнить лишь значение производной от суммы квадратов в текущий момент времени. Естественно на двойку я сокращаю и остается линейная сумма. Такой переход сильно сокращает вычисления.

Далее, как вы видите для блогов с YaRu введено понижение коэффициентов - это вызвано тем, что внутренняя ссылка является также комментарием. Более того, берется не чистое число комментариев, а число комментариев минус число комментаторов, чтобы базисные вектора были наиболее независимыми.

Следующий момент - строчка 15 - функция top_daysinheap - считает количество дней, в течении которых записи этого блогера попадали в рассмотрение. Чем чаще попадает, тем меньше у него шансов попасть в ТОП. Аналогично для строчки 16 - смотрятся все ТОПы блогера за год, чем их больше тем позднее мы будем анализировать записи блогера. Если автор был в ТОПе 500 раз за год, то у него уже нет шансов попасть в ТОП в этом году.

Переходим к условию Where. Видим, что для попадания в рассмотрение вашей записи нужно

  • иметь текст какой-то (строчка 24)
  • не затрагивать активную тему дня (строчка 25)
  • не быть в уже в ТОПе (строчка 26)
  • не быть забаненным автоматически (например, если нет русских слов, строчка 27)
  • нулевой фильтр представлен в строчке 28 - пока без ссылок могут в топ попадать лишь записи ЖЖ, это так как есть нехватка хороших записей вцелом и так как мало записей имеет ссылки до того как попадают в ТОП, если не являются накрутками или трансляциями.
  • запись должна быть сделана за последние 3 дня. (выходные 2 дня, а многие читают и комментят блоги только с работы, (строчка 29))
  • записей с этой блогплатформы должно быть более 10, чтобы я был уверен, что беру лучшее из нескольких, а не единственную запись, которая и дает максимум.(строчка 30) Вероятно отсутствие такого ограничения и позволяло lleo постоянно попадать в ТОП даже не имея комментариев, так как у него уникальная блогплатформа не имеющая аналогов. Сейчас я отношу его к общей группе StandAlone блогам.
  • посещения (переходы с Яндекса) не должны вносить наибольший вклад в значение (строчка 31). Чтобы ТОП и темы дня не влияли на ТОП.
  • И чуть не забыл (строчка 9) - если более 20 постов за короткий промежуток времени, то тоже исключаем из рассмотрения



Вот пока и все. Другой формулы первичной сортировки не вывести, разве что коэффициенты подкрутить, но опять же ввержу окажутся теже записи, соответствующие экстремальным векторам в четырехмерном пространстве.

И в заключение, наиболее распространенная ошибка в том, чтобы составив алгоритм тут же смотреть какие записи он дает в первых 30. Надо помнить, что все у нас растянуто во времени и хороших записей в рассмотрении в конкретный момент бывает не сразу 30, а 5-10, которые фильтры и вычленяют на следующих этапах. А со временем индексирования записи добавляются в кучу, что позволяет нормально сформировать топ30.
Отвечаю на вопросы в блоге на flashr.ya.ru.


Метки:   Категории:topbot | Yandex


blog comments powered by Disqus

Добавить комментарий

Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Не отображать

Topbot at FeedsBurner

Облако тэгов

Мои Твиты

Twitter августа 16, 21:21
программа instagramliker обновлена 2018г еще раз http://dlvr.it/Qg7KPW

Twitter августа 15, 18:33
Разбор 2 сезона Рассказ служанки http://dlvr.it/Qg0Qxv https://twitter.com/f1ashr/status/1029798147676037121/photo/1

Twitter августа 14, 10:28
Юпитер для Америки (Юмор от НАСА) http://dlvr.it/QfqqTP https://twitter.com/f1ashr/status/1029313699054477312/photo/1

Twitter августа 14, 10:28
Мелькает число 35 в международных новостях http://dlvr.it/QfqqXV

Twitter августа 10, 23:41
Рейтинг каналов и ботов Телеграмм http://dlvr.it/QfVknB https://twitter.com/f1ashr/status/1028063721153691648/photo/1

Twitter августа 10, 23:41
Facebook потерял спутник во взрыве SpaceX http://dlvr.it/QfVklq https://twitter.com/f1ashr/status/1028063716946792448/photo/1

Twitter августа 10, 23:09
Интернет мемы победили Иисуса http://dlvr.it/QfVdXj https://twitter.com/f1ashr/status/1028055673823670272/photo/1

Twitter августа 10, 23:09
Японское аниме в российских кинотеатрах http://dlvr.it/QfVdV3 https://twitter.com/f1ashr/status/1028055668341661696/photo/1

Twitter августа 10, 23:09
Карта из 500млн. чекинов http://dlvr.it/QfVdQG https://twitter.com/f1ashr/status/1028055661697875968/photo/1

Twitter августа 10, 22:35
Медведь открывает дверь http://dlvr.it/QfVWZY https://twitter.com/f1ashr/status/1028047110791299072/photo/1

Twitter августа 10, 22:01
На батуте в космос http://dlvr.it/QfVNw3

Twitter августа 10, 21:29
Российские дирижабли покарят мир в 2035 году http://dlvr.it/QfVGwd https://twitter.com/f1ashr/status/1028030497220259840/photo/1

Twitter августа 10, 21:29
Skype and Baidu links http://dlvr.it/QfVGyS

Twitter августа 10, 21:29
7 лет аккаунту в твиттере http://dlvr.it/QfVGz9

Twitter августа 8, 09:51
Разбор сериала Экспансия (Пространство) http://dlvr.it/QfBHV6 https://twitter.com/f1ashr/status/1027130062976372736/photo/1

Twitter июля 29, 17:51
Добыча криптовалюты в браузере посетителей сайта http://dlvr.it/Qd94p4 https://twitter.com/f1ashr/status/1023626972050518016/photo/1

Twitter июля 29, 04:45
Танцы человека с роботом http://dlvr.it/Qd6Zmn

Twitter июля 29, 04:45
Казахстан переходит на 2-й этап к демократии http://dlvr.it/Qd6Zmt

Twitter июля 29, 04:45
Проблема монетизации на Ютубе http://dlvr.it/Qd6ZfV https://twitter.com/f1ashr/status/1023429180506009600/photo/1

Twitter июля 29, 04:12
Двенадцать часов на сценарной карте http://dlvr.it/Qd6VJL https://twitter.com/f1ashr/status/1023420876362895361/photo/1

Мой твиттер

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008