def graph_update(fl_name): disp_data = {} update_queue = queue.Queue() ppr_id = fl_name.replace('.zip','') meta_res = get_arxiv_meta.call_api(ppr_id) c_title = hashish.compress(meta_res['tit']) if not c_title: return None disp_data['T'] = c_title ref_list = [] updated_node_count = 0 rp_node = graph.find_one("Paper", "id", hashish.get_hash(c_title)) if not rp_node or rp_node['complete'] == "F": filename = fl_name #path = app.config['UPLOAD_FOLDER'] path = '/home/beingcooper/Desktop/authrank/uploads' ref_list = prep_node.prep_node(graph, filename, path, ppr_id, meta_res, True) try: add_score = ref_list[0] except: pass updated_node_count+=1 for i in range(1, len(ref_list)): ref_node = ref_list[i] ref_node_score = ref_node['q_score'] ref_node['q_score'] = ref_node['q_score'] + add_score ref_node.push() update_queue.put((ref_list[i], ref_node_score, ref_node['q_score'])) updated_node_count += 1 if updated_node_count: updated_node_count = update_graph_algo(update_queue, updated_node_count) disp_data['C'] = updated_node_count return disp_data
def prep_node(graph, f3, in2, ppr_id, meta_res, update = False): # Node creation refs = [] text = '' available = False if update: item_count = 1 else: item_count = len(os.listdir(in2)) c_title = hashish.compress(meta_res['tit']) rp_node = graph.find_one("Paper", "id", hashish.get_hash(c_title)) if rp_node: rp = rp_node rp['complete'] = "T" rp.push() else: rp = Node("Paper", name = c_title, id = hashish.get_hash(c_title), title = meta_res['tit'], q_score = 0.01, complete = "T") graph.create(rp) for a in meta_res['aut']: try: a = a.decode('utf-8') except: a = a.decode('latin-1') author_node = graph.find_one("Author", "name", a) if author_node: aut = author_node else: aut = Node("Author", name=a) graph.create(aut) graph.create(Relationship(aut, "Published", rp)) for c in meta_res['cat']: C = c.decode('utf-8') subject_name = sub_mapping.map_id_to_name(C) if not subject_name: continue category_node = graph.find_one("Category", "name", C) if category_node: cat = category_node else: cat = Node("Category", name=C, subject = subject_name) graph.create(cat) graph.create(Relationship(rp, "BelongsTo", cat)) # Extract References in3 = in2 + '/' + ppr_id if item_count == 1: with zipfile.ZipFile(in2+"/"+f3,"r") as zeep: os.makedirs(in3) zeep.extractall(in3) for f4 in os.listdir(in3): if f4.lower().endswith(".bbl"): available = True with open(in3+ '/' +f4) as f: try: text = text + '\n' + f.read() except: pass break if not available: for f4 in os.listdir(in3): if f4.lower().endswith(".tex"): available = True with open(in3+ '/' +f4) as f: try: text = text + '\n' + f.read() except: pass # Create Reference Relationship if available: refs = extract_refs.lets_hit_it(text) ref_list = [] ref_list.append(rp['q_score']) for ref in refs: comp_title = hashish.compress(ref) if not comp_title: continue h_title = hashish.get_hash(comp_title) paper_node = graph.find_one("Paper", "id", h_title) if paper_node: ppr = paper_node else: ppr = Node("Paper", name=comp_title, id=h_title, title=ref.lstrip().rstrip(), q_score = 0.01, complete = "F") graph.create(ppr) if len(list(graph.match(start_node=rp, end_node=ppr, rel_type="Refers"))) == 0 and (rp != ppr): graph.create(Relationship(rp, "Refers", ppr)) ref_list.append(ppr) return ref_list