0

私はまれな正直なコンピュータサイエンスの問題を抱えています(通常の方法でこの言語を作成するのとは対照的に、私は頻繁に書くのではなく、何をするのか)問題が欲しい)、そして本当に変化のためのCSの学位の欠如を感じています。

リストのいくつかのディクテーションを使用しているため、これは少し厄介ですが、基本的な概念は次のとおりです。特定のツイートのリツイートをノードごとにグラフに追加し、元のツイートから外側に向かって構築するTwitterスクレイピング機能著者(フォロワーの関係をエッジとして)。

for t in RTs_list:
g = nx.DiGraph()
followers_list=collections.defaultdict(list)
level=collections.defaultdict(list)
hoppers=collections.defaultdict(list)
retweets = []
retweeters = []
try:
    u = api.get_status(t)
    original_tweet = u.retweeted_status.id_str
    print original_tweet
    ot = api.get_status(original_tweet)
    node_adder(ot.user.id, 1)
    # Can't paginate -- can only get about ~20 RTs max. Need to work on small data here.
    retweets = api.retweets(original_tweet)
    for r in retweets:
        retweeters.append(r.user.id)
    followers_list["0"] = api.followers_ids(ot.user.id)[0]
    print len(retweets),"total retweets"
    level["1"] = ot.user.id
    g.node[ot.user.id]['crossover'] = 1
    if g.node[ot.user.id]["followers_count"]<4000:
        bum_node_adder(followers_list["0"],level["1"], 2)
    for r in retweets:
        rt_iterator(r,retweets,0,followers_list,hoppers,level)      
except:
    print ""

def rt_iterator(r,retweets,q,followers_list,hoppers,level):
q = q+1
if r.user.id in followers_list[str(q-1)]:
    hoppers[str(q)].append(r.user.id)
    node_adder(r.user.id,q+1)
    g.add_edge(level[str(q)], r.user.id)
    try:
        followers_list[str(q)] = api.followers_ids(r.user.id)[0]
        level[str(q+1)] = r.user.id
        if g.node[r.user.id]["followers_count"]<4000:
            bum_node_adder(followers_list[str(q)],level[str(q+1)],q+2)
            crossover = pull_crossover(followers_list[str(q)],followers_list[str(q-1)])
        if q<10:
            for r in retweets:
                rt_iterator(r,retweets,q,followers_list,hoppers,level)
    except:
        print ""

そこには他にもいくつかの関数呼び出しがありますが、それらは問題とは関係ありません。主な問題は、(たとえば)2ホップノードから3ホップノードに移動するときにQがどのようにカウントされるかです。中心からのすべてのブランチの最大深度(10)まで構築する必要がありますが、現在は、最初に試行するブランチの最大深度まで構築しているだけだと思います。それが理にかなっていることを願っています。そうでない場合は、ここに入力することで役に立ちました。どこかでループが抜けているだけだと思いますが、見るのは大変です。

また、さまざまなdictがQ + 1またはQ-1を参照していることを無視してください。これは、リファクタリングして反り返らせる前にこれを実装した方法のアーティファクトです。

ありがとう!

4

2 に答える 2

0

「センター」の意味はよくわかりませんが、次のようなものが必要だと思います。

def rt_iterator(depth, other-args):
    # store whatever info you need from this point in the tree
    if depth>= MAX_DEPTH:
        return
    # look at the nodes you want to expand from here
    for each node, in the order you want them expanded:
        rt_iterator(depth+1, other-args)
于 2012-07-05T20:16:00.403 に答える
0

私はそれを修正したと思います...このようにして、Qは本来あるべきではないときに増分されません。

def rt_iterator(r,retweets,q,depth,followers_list,hoppers,level):
def node_iterator (r,retweets,q,depth,followers_list,hoppers,level):
    for r in retweets:
        if r.user.id in followers_list[str(q-1)]:
            hoppers[str(q)].append(r.user.id)
            node_adder(r.user.id,q+1)
            g.add_edge(level[str(q)], r.user.id)
            try:
                level[str(q+1)] = r.user.id
                if g.node[r.user.id]["followers_count"]<4000:
                    followers_list[str(q)] = api.followers_ids(r.user.id)[0]
                    bum_node_adder(followers_list[str(q)],level[str(q+1)],q+2)
                    crossover = pull_crossover(followers_list[str(q)],followers_list[str(q-1)])
                if q<10:
                    node_iterator(r,retweets,q+1,depth,followers_list,hoppers,level)
            except:
                print ""
depth = depth+1
q = depth
if q<10:
    rt_iterator(r,retweets,q,depth,followers_list,hoppers,level)
于 2012-07-05T20:17:44.337 に答える