郑昀 20090918
1、背景知识
Google Reader 用户可以再次分享他订阅的文章,只要获知某一个用户的User ID,即可通过以下格式访问他的:
- shared items feed:
- shared items 主页:
- Profile 主页:
- Profile Widget:
(0919注:UserID并不是ProfileID,你可以从shared items 主页的html代码里找到Profile ID。)
用户还可以对某篇文章表示Like。
通过对Shared和Like行为的数据收集,并构造一个简单的公式,可以大致测量出Google Reader用户的分享活跃度,简称GRUserRank。
GRUserRank 的用途:
- 是一个参考指标,当估计用户对某一篇热门文章的推荐贡献时;
- 能有效地区别对待用户,把活跃用户、分享质量低的用户、休眠用户分开,有利于优化程序;
- 也是一种社会化的参考指标。
2、如何遍历
xlvector 在《Google Reader的数据收集》中提及,因为每一个Shared Items Feed给出了like它的用户id(具体逻辑请参考我的文章《Google Reader的Likes操作数据如何获取?》),所以只要从某一批用户的Shared Item Feed出发,就可以通过广度优先搜索将整个Google Reader的用户数据抓下来。这个数据集可以说内容非常丰富,包含了时间和内容信息,相信在它的基础上可以做出不少工作。
3、分享活跃度的计算公式
这个思路是可以用来计算 GRUserRank 的。
第一步,
我们从 玩聚SR 的已收集GR用户ID集合(基本能保证都是中文用户)开始,扫描每一个用户的Shared Items Feed,根据正则表达式:
<gr:likingUser>([0-9a-z_!~*'()-]+)</gr:likingUser>
从中获取所有 likingUser 的ID,存入全局字典,统计每一个User最近作出Like操作的次数(变量简称Likes),保证唯一性。
这样,我们拿到了一个很大的GReader User ID集合(简称LikingUsers),由于主要是对中文文章做like操作的用户,所以也基本是中文用户。当然这个集合里:
- 并不能遍历到所有的GReader中文用户;
- 并不是所有人都公开了自己的Shared Items;
- 只有少部分人创建了Google Profile,拥有自己的Logo。
接下来,我们遍历 LikingUsers 集合,按照 Likes 的顺序,即经常标记Like的用户优先遍历。
对于每一个用户,要拿到以下数值:
- 三十天内是否分享过文章:没有的话,说明此用户已经是休眠用户;
- 四天内分享过多少文章:变量简称Shares;
- 最近分享的三篇文章的发表时间新鲜度:变量简称FreshMeats。用每一篇文章发表时间减去一个基准时间值(我取前四天的日期作为基准,如今日是9月18日,那么基准时间是2009-09-15),然后取平均值。
- 最近分享的三篇文章的标题是否都不包含中文:如果都不包含中文,说明该用户也许不是中文用户,可以disable了。
第三步,
按照我的文章《Social Media排序算法的四种模式》,我们还要指定一个时间基数:
BaseSeconds :12.5 小时周期内的总秒数,45000秒。
那么公式就是:
GRUserRank = Log10(Likes*因子A+Shares*因子B)+FreshMeats/BaseSeconds
因子A、B自己调整,我取2和3。