概述
ArticleRank(文章排名)起源于PageRank,用于实现对文章的影响力排名。
- J. Li, P. Willett, ArticleRank: a PageRank-based Alternative to Numbers of Citations for Analysing Citation Networks (2009)
基本概念
ArticleRank
与网页之间的链接类似,文章(书籍、报告等)之间的引用代表权威性和高质量。通常认为,一篇文章获得的引用次数越多,该文章在其特定研究领域内的影响就越大。
然而,并非所有文章都同等重要。因此,这种基于PageRank的文章排名方法被提出。
ArticleRank基本保留了PageRank的计算方法,同时也进行了一些修改。当一篇文章向其引用的文章传递排名时,不是将排名除以出度进行平均分配,而是除以该文章的出度和所有文章的平均出度之和。文章u在一次迭代后的排名为:
![](https://img.ultipa.cn/img/2023-03-23-17-47-45-ar.jpg)
其中Bu是文章u的后链集合,d是阻尼系数。分母的这种变化能削弱那些出度很小的文章的贡献度。
嬴图的ArticleRank使用的分母与原始论文不同,但核心思想是相同的。
特殊说明
文章引用网络有一些特性与WWW不同,例如:
- 文章不能引用自己,即网络中没有自环边。
- 两篇文章不能相互引用,即一篇文章不能既是另一篇文章的前链,又是它的后链。
- 一般已发表文章中的引用不会改变,即文章的前链是固定的。
语法
- 命令:
algo(page_rank)
- 参数:
名称 |
类型 |
规范 |
默认 |
可选 |
描述 |
---|---|---|---|---|---|
init_value | float | >0 | 0.2 |
是 | 所有点的初始排名 |
loop_num | int | >=1 | 5 |
是 | 迭代轮数 |
damping | float | (0,1) | 0.8 |
是 | 阻尼系数 |
weaken | int | 1 , 2 |
1 |
否 | 计算 ArticleRank 时,保持此项为 2 ;1 代表计算 PageRank |
limit | int | ≥-1 | -1 |
是 | 返回的结果条数,-1 返回所有结果 |
order | string | asc , desc |
/ | 是 | 按排名分值大小对结果进行排序 |
示例
示例图如下:
![](https://img.ultipa.cn/draw/draw_3567da410d274c708999de9375e546cb.jpg?v='1680581724228')
文件回写
配置项 | 回写内容 |
---|---|
filename | _id ,rank |
algo(page_rank).params({
init_value: 1,
loop_num: 50,
damping: 0.8,
weaken: 2,
order: 'desc'
}).write({
file: {filename: 'rank'}
})
结果:文件rank
book4,0.428308
book5,0.375926
book6,0.319926
book7,0.2
book3,0.2
book2,0.2
book1,0.2
属性回写
配置项 | 回写内容 | 回写至 | 数据类型 |
---|---|---|---|
property | rank |
点属性 | / |
algo(page_rank).params({
loop_num: 50,
weaken: 2
}).write({
db:{property: 'AR'}
})
结果:每个节点的排名回写至名为AR的点属性下
直接返回
别名序号 | 类型 | 描述 | 列名 |
---|---|---|---|
0 | []perNode | 点及其排名 | _uuid , rank |
algo(page_rank).params({
init_value: 1,
loop_num: 50,
damping: 0.8,
weaken: 2,
order: 'desc',
limit: 3
}) as AR
return AR
结果:AR
_uuid | rank |
---|---|
4 | 0.42830801 |
5 | 0.37592599 |
6 | 0.31992599 |
流式返回
别名序号 | 类型 | 描述 | 列名 |
---|---|---|---|
0 | []perNode | 点及其排名 | _uuid , rank |
algo(page_rank).params({
loop_num: 50,
damping: 0.8,
weaken: 2,
order: 'desc',
limit: 3
}).stream() as AR
find().nodes({_uuid == AR._uuid}) as nodes
return table(nodes._id, AR.rank)
结果:table(nodes._id, AR.rank)
nodes._id | AR.rank |
---|---|
book4 | 0.42830801 |
book5 | 0.37592599 |
book6 | 0.31992599 |