Python中的PageRank:超过最大递归深度

问题描述 投票:0回答:1

我有一个数据集-大约有30000个用户,我想根据基于PageRank的UserRank算法来计算每个用户的影响力:enter image description here

对于每个用户,我都有一个关注者列表。我试图用Python计算它,但是我得到了:

RecursionError: maximum recursion depth exceeded while calling a Python object

这里是代码:

def calculate_user_rank(user_id):
    user_rank = 0
    for j in user[user_id]["followers"]:
        user_rank += (1 + (user[user_id]["followers_count"]/user[user_id]["tweets"]) * calculate_user_rank(j))/user[j]["followers_count"]
    return user_rank

有没有办法为每个用户计算此度量?

python recursion social-networking pagerank
1个回答
0
投票

处理该问题的一种方法是利用动态编程的概念,因为您可能会一遍又一遍地重复解决相同的子问题。因此,最好是存储用户页面排名的结果,而不是一次又一次地计算它们。

用途:

def calculate_user_rank(user_id, memo={}):
    user_rank = 0
    for j in user[user_id]["followers"]:
        if j not in memo:
            memo[j] = calculate_user_rank(j, memo)

        user_rank += (1 + (user[user_id]["followers_count"]/user[user_id]["tweets"]) * memo[j])/user[j]["followers_count"]
    memo[user_id] = user_rank

    return memo[user_id]

0
投票

您可以随时更改默认递归限制:What is the maximum recursion depth in Python, and how to increase it?但是在此示例中,我希望为您的问题提供迭代解决方案(例如:https://github.com/thomasjhuang/PageRank/blob/master/run_pagerank.py),并为每个用户缓存其性能得分。

© www.soinside.com 2019 - 2024. All rights reserved.