thedeemon: (Default)
[personal profile] thedeemon
Гораздо лучше, чем (не)указанные в профиле интересы, об интересах ЖЖ-юзера говорит его френдлента. По крайней мере для таких, как я, которые добавляют в друзья в основном тех, кого им интересно читать. А значит, для почти всякого ЖЖ-юзера Х можно автоматически найти его единомышленников, людей со схожими интересами: это юзеры, чья френдлента заметно пересекается с лентой Х (можно отсортировать по числу людей в пересечении). Эти люди могут не быть ни френдами Х, ни числить Х в своих френдах, ни френдами френдов Х, но тем не менее найти их очень просто.

Написал для этого дела программку. Исходники, на выбор, Ruby или Haskell. На Руби получилось покороче. В процессе работы программа выводит прогресс на консоль, кэширует ответы сервера в текстовых файлах friends_*.txt и сохраняет результат в файл cothinkers.txt, куда в отсортированном по релевантности виде записывает ники единомышленников (кроме тех, кто уже является френдом) и количество общих френдов (в список попадают те, у кого оно больше 1).

Date: 2010-06-13 01:19 pm (UTC)
From: [identity profile] qz.livejournal.com
А какие-нибудь преимущества у хаскель версии есть? Я не знаю.. работает быстрее, написалась и отладилась быстрее, ...

Date: 2010-06-13 02:01 pm (UTC)
From: [identity profile] theiced.livejournal.com
она на хаскеле, хуле непонятно ;]

+1

Date: 2010-06-13 03:06 pm (UTC)
From: [identity profile] nealar.livejournal.com
Вот да, странный вопрос.

Date: 2010-06-13 03:37 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Никаких особых преимуществ, кроме возможности скомпилить самостоятельный бинарник. Просто среди тех, кто увидит эту запись, предположительно больше людей с установленным ghc, чем с ruby. А я чуток потренировался в хаскеле, это моя вторая в жизни программа на нем. :) Соответственно, написалась сильно медленнее, зато отладки не потребовалось.

Date: 2010-06-13 02:37 pm (UTC)
From: [identity profile] voidex.livejournal.com
Если считать подключение модулей, то да, а так 30 против 29.

И эту функцию можно же переписать так же, как и в Руби :)
get_friends user marker = map (drop 2) . filter ((== marker) . take 1) . lines <$> get_friengs_resp user user

Это я скорее для съязвившего выше по треду.

Date: 2010-06-13 03:04 pm (UTC)
From: [identity profile] theiced.livejournal.com
а я чо, я ничо.

Date: 2010-06-13 05:00 pm (UTC)
From: [identity profile] voidex.livejournal.com
Да я тоже ничо, просто решил посчитать кол-во строк и защитить честь нагло втаптываемого в грязь Хаскеля! :)

Date: 2010-06-13 03:43 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Про <$> не знал, спасибо!
По числу строк решения практически равны, но по размеру раза в полтора отличаются, Руби тут все равно несколько лаконичней. В нем не нужны церемониальные танцы вокруг IO и чистоты.

Date: 2010-06-13 03:18 pm (UTC)
From: [identity profile] sleepy-drago.livejournal.com
ну если честно то в исходном критерии есть существенные недостатки :)
Во первых даже для тех кто предпочитает таки ее читать там могут быть "сверхпопулярные спамеры" которых там держат на случай вдруг они что-нибудь напишут :) Во вторых далеко не все источники в ленте - как минимум еще есть гуглоreader&co, есть делишес и масса подобных ему сервисов. Есть твиттер, правда я его не понимаю.
Вот если попытаться опутать их все - могло бы быть очень интересно тк источники меняются постоянно а гугл увы на уровне словаря или man|msdn или всякой педивикии.

Date: 2010-06-14 08:22 am (UTC)
From: [identity profile] 109.livejournal.com
просто число людей в пересечении не катит. если какой-то бот к себе добавил весь рунет, то он по твоему критерию станет твоим лучшим единомышленником. надо совпадению приписывать положительный вес, а несовпадению - отрицательный. а как только это быдет сделано - девять из первых десяти будут френды, чисто из-за кластеризации.

но идея всё равно хорошая, может высунешь веб-интерфейс какой-нибудь? а то у меня нету ни руби, ни хаскеля.

Date: 2010-06-14 09:04 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Критерий можно усложнять и улучшать очень долго, но идеальная формула вряд ли существует. Если придать отрицательный вес несовпадениям, можно потерять много годных единомышленников с более широким кругом интересов. А ботов, к счастью, не так много, чтобы они были проблемой (у меня в первую двадцадку ни одного не вошло).

Веб-интерфейс соорудить пока негде, и делать этого не хочется - все запросы тогда будут с одного адреса, придется отдельно стараться выполнить все правила ЖЖ для ботов, дабы не быть забаненым. Сейчас выполнена лишь пара основных (кэширование и отсутствие параллельных соединений).

Могу выложить запускабельный виндовый exe-шник.

Date: 2010-06-14 06:28 pm (UTC)
From: [identity profile] 109.livejournal.com
единомышленники с "более широким кругом интересов", очевидно, не настолько единомышленники, как единомышленники с точно таким же кругом. тут как-то странно спорить даже.

опус про идеальную формулу я, с вашего позволения, не буду комментировать.

Date: 2010-06-14 01:55 pm (UTC)
From: [identity profile] nealar.livejournal.com
Если подскажешь, как накрутить веб-фейс, могу запустить у себя.

shell

Date: 2010-06-15 09:37 am (UTC)
From: [identity profile] vorotylo.livejournal.com
http://paste2.org/p/878435

Re: shell

Date: 2010-06-15 09:47 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Прикольно. :)
А как такие штуки отлаживаются?

Re: shell

Date: 2010-06-15 09:49 am (UTC)
From: [identity profile] vorotylo.livejournal.com
Т.е., как убедиться в правильности работы без статической типизации?

Re: shell

Date: 2010-06-15 09:55 am (UTC)
From: [identity profile] vorotylo.livejournal.com
> А как такие штуки отлаживаются?
Многократным просмотром кода и использованием.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 28th, 2026 07:52 pm
Powered by Dreamwidth Studios