obartunov: (Default)
[personal profile] obartunov
У некоторых людей возникает вопрос, что бы такое и эдакое почитать ! Замечательно, что у нас есть друзья, которые могут подсказать, но чаще всего вы остаетесь наедине с самим собой и компьютером. Когда-то я решил написать скрипт, который бы мне рекомендовал книги для чтения, учитывая коллективный опыт посетителей онлайн библиотек. Я взял дамп базы данных lib.rus.ec, который был доступен для скачивания, преобразовал его в любимый постгрес, использовал амазоновский алгоритм item-item collaborative filtering ( гуглите ) и накатал sql скрипт, который на основе оценок читателей like-dislike вычисляет матрицу рекомендации. Для доступа к вебу я написал перловый скрипт, который по bookid выдает сортированный по похожести список рекомендованных книг. По-умолчанию, скрипт выдает похожести для книги Стругацких "Понедельник начинается в субботу". Так как я этим занимался в качестве упражнения, то все очень просто и никаких гарантий :) Было бы хорошо прикрутить его к flibusta.net, которой я теперь пользуюсь, но у меня нет данных о ее базе и где можно получить регулярный доступ к ней.

Достал скрипт и стряхнул пыль, можно попробовать. Сам веб-интерфейс.

-- SQL example, change placeholder '?' by exact itemid
-- libbook, libavtorname, libavtor - application specific tables
SELECT * from (   
select qq.itemid, 
        array_to_string(ihu.category, ',') as categories,
        array_to_string ( ihu.rates, ',' ) as rates,
        array_to_string(  ARRAY (
          select coalesce(la.firstname,'')||' '|| 
                 coalesce(la.middlename,'')||' '||
                 coalesce(la.lastname,'')  
          from libavtorname la, libavtor ba
          where ba.bookid=qq.itemid and la.authorid=ba.avtorid
        ),',') as author,
       ii.smlorig, ii.sml, b.title
from (
       select itemid2 as itemid from ii_view  where itemid1=93860
     ) as qq, 
     libbook b, ii_view ii, ihu
where b.bookid=qq.itemid and ihu.itemid=b.bookid
--and ii.itemid1=? and ii.itemid2=qq.itemid and ii.sml >= ? order by ii.sml des
and ii.itemid1=93860 and ii.itemid2=qq.itemid 
group by qq.itemid, categories, rates, author, ii.smlorig, ii.sml, b.title
order by ii.sml desc limit 10
) as t;


This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

obartunov: (Default)
obartunov

July 2020

S M T W T F S
   1234
56 7891011
12131415161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags