ArticleRank has been derived from PageRank to measure the influence of journal articles.
Like links between webpages, citations between articles (e.g., books or reports) indicate authority and quality. It is generally assumed that the more citations an article receives, the greater its perceived impact within its research domain.
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 in the denominator reduces the bias that makes articles with few out-links seem to contribute more to their 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:

Run the following statements on an empty graph to define its structure and insert data:
ALTER GRAPH CURRENT_GRAPH ADD NODE { book () }; ALTER GRAPH CURRENT_GRAPH ADD EDGE { cite ()-[]->() }; INSERT (book1:book {_id: "book1"}), (book2:book {_id: "book2"}), (book3:book {_id: "book3"}), (book4:book {_id: "book4"}), (book5:book {_id: "book5"}), (book6:book {_id: "book6"}), (book7:book {_id: "book7"}), (book1)-[:cite]->(book4), (book1)-[:cite]->(book5), (book2)-[:cite]->(book4), (book3)-[:cite]->(book4), (book4)-[:cite]->(book5), (book4)-[:cite]->(book6);
To load the entire graph to the HDC server hdc-server-1 as my_hdc_graph:
CREATE HDC GRAPH my_hdc_graph ON "hdc-server-1" OPTIONS { nodes: {"*": ["*"]}, edges: {"*": ["*"]}, direction: "undirected", load_id: true, update: "static" }
Algorithm name: page_rank
Name | Type | Spec | Default | Optional | Description |
|---|---|---|---|---|---|
init_value | Float | >0 | 0.2 | Yes | The initial rank assigned to all nodes. |
loop_num | Integer | ≥1 | 5 | Yes | The maximum number of iteration rounds. The algorithm terminates after all iterations are completed. |
damping | Float | (0,1) | 0.8 | Yes | The damping factor. |
weaken | Integer | 1, 2 | 1 | Yes | Keeps it as 2 for ArticleRank. Sets to 1 will run PageRank. |
return_id_uuid | String | uuid, id, both | uuid | Yes | Includes _uuid, _id, or both values to represent nodes in the results. |
limit | Integer | ≥-1 | -1 | Yes | Limits the number of results returned; -1 includes all results. |
order | String | asc, desc | / | Yes | Sorts the results by rank. |
algo(page_rank).params({ projection: "my_hdc_graph", return_id_uuid: "id", init_value: 1, loop_num: 50, damping: 0.8, weaken: 2, order: "desc" }).write({ file: { filename: "article_rank" } })
Result:
File: article_rank_id,rank book4,0.428308 book5,0.375926 book6,0.319926 book2,0.2 book3,0.2 book7,0.2 book1,0.2
Writes the rank values from the results to the specified node property. The property type is float.
algo(page_rank).params({ projection: "my_hdc_graph", loop_num: 50, weaken: 2 }).write({ db:{ property: 'rank' } })
exec{ algo(page_rank).params({ return_id_uuid: "id", init_value: 1, loop_num: 50, damping: 0.8, weaken: 2, order: "desc", limit: 3 }) as AR return AR } on my_hdc_graph
Result:
| _id | rank |
|---|---|
| book4 | 0.428308 |
| book5 | 0.375926 |
| book6 | 0.319926 |
exec{ algo(page_rank).params({ return_id_uuid: "id", loop_num: 50, damping: 0.8, weaken: 2, order: "desc", limit: 3 }).stream() as AR return AR } on my_hdc_graph
Result:
| _id | rank |
|---|---|
| book4 | 0.428308 |
| book5 | 0.375926 |
| book6 | 0.319926 |