2012-05-07 4 views
0

Я пытаюсь решить проблему сайта знакомств. Вот проблемаMulti Attribute Matching of Profiles

Каждый пользователь приложения будет иметь некоторые атрибуты - как книги, которые он читает, фильмы, которые он смотрит, музыку, телешоу и т. Д. Это определенные категории атрибутов верхнего уровня. Каждая из этих категорий может иметь любое количество значений. например в книгах: Fountain Head, Love Story ...

Теперь мне нужно сопоставить пользователей на основе атрибутов профиля. Вот что я собираюсь сделать:

Храните данные с обратной индексацией. если. Каждый из Fountain Head, Love Story и т. Д. Является ключевым ключом для набора пользователей с этим атрибутом.

Когда новый пользователь присоединяется, получите атрибуты этого пользователя, найдите, какие указательные ключи для этого пользователя, получите всех пользователей для этих ключей, ведро (или сортировку радиуса или аналогичную сортировку) для сортировки на основе того, сколько раз пользователь в этом объединенном списке.

Это хорошо, плохо, хуже? Любые другие предложения?

Благодаря Аджай

+0

Не могу понять, почему этот вопрос должны были быть опущены. – DroidOS

ответ

7

Алгоритм вы описали это не плохо, хотя он использует очень простое понятие сходства между людьми.

Позвольте нам сделать его более регулируемым, не создавая сложных критериев соответствия. Предположим, что люди, которые любят одну и ту же книгу, более похожи, чем люди, которые слушают одну и ту же музыку. То же самое касается всех интересов. То есть, сходство в разных полях имеет разные веса.

Как вы сказали, вы можете сохранить список для каждого интереса (например, книги, песни и т. Д.) Людям, которые имеют это в своем профиле. Тогда, скажем, вы хотите, чтобы найти спички парня g:

for each interest i in g's interests: 
    for each person p in list of i 
    if p and g have mismatching sexual preferences 
     continue 
    if p is already in g's match list 
     g->match_list[p].score += i->match_weight 
    else 
     add p to g->match_list with score i->match_weight 

sort g->match_list based on score 

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

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

+0

Спасибо Shahbaz. Это помогает. Можете ли вы предложить любой другой сложный алгоритм для сопоставления людей на основе различных атрибутов? –

+1

@ AjayBansal, как я уже сказал, это касается психологии. Посмотрите на [этот сайт] (http://mashable.com/2011/07/13/match-com-equation/), например, чтобы понять, насколько сложно это сделать. По-моему, эти алгоритмы по-прежнему очень просты по сравнению с тем, как ведут себя люди. Вы также можете найти что-то в научных статьях. – Shahbaz

+0

@Shahbaz, возможно ли это в SQL-запросе? –