ArticleRank has been derived from PageRank to measure the influence of journal articles.
Similar to links between webpages, citations between articles (books, reports, etc.) represent authoritativeness and high quality. It is normally assumed that the greater the number of citations that an article receives, the greater impact that article has within its particular research area.
However, not all articles are equally important. Hence, this approach based on PageRank was proposed to rank articles.
ArticleRank retains the basic PageRank methodology while making some modifications. When an article passes its rank among its forward links, it does not divide the rank equally by the out-degree of that article, but by the sum of the out-degree of that article and the average out-degree of all articles. The rank of article u after one iteration is:

where Bu is the backlink set of u, d is the damping factor. This change of the denominator reduces the bias that an article with very small out-degree makes a greater contribution to its forward links.
NOTEThe denominator of Ultipa's ArticleRank is different from the original paper while the core idea is the same.
In comparison with WWW, some features have to be considered for citation networks, such as:
algo(page_rank)Name | Type | Spec | Default | Optional | Description |
|---|---|---|---|---|---|
| init_value | float | >0 | 0.2 | Yes | The same initial rank for all nodes |
| loop_num | int | >=1 | 5 | Yes | Number of iterations |
| damping | float | (0,1) | 0.8 | Yes | Damping factor |
| weaken | int | 1, 2 | 1 | No | For ArticleRank, keep it as 2; 1 means to run PageRank |
| limit | int | ≥-1 | -1 | Yes | Number of results to return, -1 to return all results |
| order | string | asc, desc | / | Yes | Sort nodes by the rank |
The example graph is as follows:

| Spec | Content |
|---|---|
| filename | _id,rank |
UQLalgo(page_rank).params({ init_value: 1, loop_num: 50, damping: 0.8, weaken: 2, order: 'desc' }).write({ file: {filename: 'rank'} })
Results: File rank
Filebook4,0.428308 book5,0.375926 book6,0.319926 book7,0.2 book3,0.2 book2,0.2 book1,0.2
| Spec | Content | Write to | Data Type |
|---|---|---|---|
| property | rank | Node property | float |
UQLalgo(page_rank).params({ loop_num: 50, weaken: 2 }).write({ db:{property: 'AR'} })
Results: Rank for each node is written to a new property named AR
| Alias Ordinal | Type | Description | Columns |
|---|---|---|---|
| 0 | []perNode | Node and its rank | _uuid, rank |
UQLalgo(page_rank).params({ init_value: 1, loop_num: 50, damping: 0.8, weaken: 2, order: 'desc', limit: 3 }) as AR return AR
Results: PR
| _uuid | rank |
|---|---|
| 4 | 0.42830801 |
| 5 | 0.37592599 |
| 6 | 0.31992599 |
| Alias Ordinal | Type | Description | Columns |
|---|---|---|---|
| 0 | []perNode | Node and its rank | _uuid, rank |
UQLalgo(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)
Results: table(nodes._id, AR.rank)
| nodes._id | AR.rank |
|---|---|
| book4 | 0.42830801 |
| book5 | 0.37592599 |
| book6 | 0.31992599 |