File size: 1,513 Bytes
908351f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""
Influential Papers Task

This module provides functionality to identify the most influential papers in a citation graph.

Functions:
    influential_papers(K, graph):
        Given an integer K and a citation graph, returns the K most influential papers based on the number of citations.
        The function returns the title and abstract of each of the K most influential papers in a formatted string.

Usage:
    The script reads configuration from a YAML file, loads a citation graph from a GEXF file, and prints the K most influential papers.
"""

import datetime
import re

def influential_papers(message, graph):
    # Get integer number from message
    K = int(re.search(r'\d+', message).group())

    in_degree = dict(graph.in_degree())
    sorted_in_degree = sorted(in_degree.items(), key=lambda x: x[1], reverse=True)

    most_cited_papers = []
    for i in range(K):
        node = sorted_in_degree[i]
        paper = graph.nodes[node[0]]
        most_cited_papers.append(paper)

    resp = "Here are the most influential papers:\n"
    for i, paper in enumerate(most_cited_papers):
        full_paper_id = paper['label']
        paper_id = re.sub(r'[a-zA-Z/]+', '', full_paper_id)
        year = paper_id[:2]
        year = '19' + year if int(year) > 70 else '20' + year
        month = datetime.date(1900, int(paper_id[2:4]), 1).strftime('%B')
        
        resp += f"{i+1}. Title: {paper['title']}, arXiv {full_paper_id}, {month} {year} \nAbstract: {paper['abstract']}\n"

    return resp