1.主要方法
将用户所有相关的tag组合成一个query,用户对某个tag的关心程度通过设定字段的boost来体现;Github的所有项目看做多个document,分成title和description两个域,基于Lucene实现用户和项目的匹配算法,取出Top n的项目为用户推荐。
2.实验结果
例如:为stackoverflow用户ID=20089推荐项目,实验中取了排名前50个匹配项目,项目Id及匹配分数 如下图所示
根据匹配分数拿到github项目具体信息:
stackoverflow的用户信息(可参考stackoverflow的top tags,反映了用户的关心领域)
结论:从上图可以看出,推荐的项目与用户的关心领域是密切相关的,top tags上是与前端相关的标签js,jquery等,匹配的项目也是与前端相关。由此可以认为该算法可以为用户从海量项目中筛选出用户所关心的项目。
优化:用户的关心领域的考量可以加入时间因子,某个帖子的发布时间越近,与帖子相关的tag应该获取更高的权重,存储tag的最近更新时间,取其与第一个stackoverflow帖子的时间差的函数值作为参考。
3.下一步工作
上述工作得到了用户的所关心的领域的匹配项目,需要进一步筛选,项目本身有优劣之分,用户也有技术能力高低,如何确定该项目是否值得向某用户推荐,需要用户和项目两个方面来分析。 首先,还是从项目出发,普遍认为流行的项目会更吸引用户关注,通过github项目属性,比如watch,fork,contributor,pull request等,皆能体现用户参与度。分析项目属性,对项目进行评价,记你一步筛选出比较流行的、优秀的项目推荐给用户。