Spaces:
Running
Running
File size: 2,948 Bytes
d5b28d0 b9c182b d5b28d0 fd28539 d5b28d0 b9c182b d5b28d0 b9c182b d5b28d0 b9c182b d5b28d0 ea08d7a fd28539 b9c182b ea08d7a b9c182b ea08d7a b9c182b fd28539 d5b28d0 ea08d7a fd28539 b9c182b d5b28d0 ea08d7a b9c182b ea08d7a de348fb ea08d7a b9c182b ea08d7a b9c182b ea08d7a b9c182b ea08d7a b9c182b ea08d7a b9c182b ea08d7a b9c182b ea08d7a b9c182b ea08d7a b9c182b ea08d7a b9c182b ea08d7a fd28539 b9c182b fd28539 b9c182b fd28539 b9c182b d5b28d0 fd28539 b9c182b |
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# Based on: https://github.com/allenai/s2-folks/tree/main/examples/python
#
#
import os
import traceback
import requests
S2_API_KEY = os.getenv("S2_API_KEY")
result_limit = 10
def find_basis_paper(query, result_limit=10):
papers = None
info = """Search results:
"""
while not papers:
if not query:
continue
try:
if len(S2_API_KEY):
print("Using S2_API_KEY...")
rsp = requests.get(
"https://api.semanticscholar.org/graph/v1/paper/search",
headers={"X-API-KEY": S2_API_KEY},
params={
"query": query,
"limit": 100,
"fields": "title,url,authors,year,tldr,journal,citationCount",
"sort": "citationCount:desc",
},
)
rsp.raise_for_status()
results = rsp.json()
total = results["total"]
if not total:
return "No matches found. Please try another query."
print(f"Found {total} results. Showing up to {result_limit}.")
papers = results["data"]
info += format_paper_list(papers, int(result_limit))
except Exception as e:
print(traceback.format_exc())
info += "There was a problem...\n\n%s" % e
print(info)
return info
def get_element(paper, part):
simple_parts = ["year", "url", "title", "citationCount"]
if part in simple_parts:
if part in paper and paper[part] is not None:
v = paper[part]
return v.strip() if isinstance(v, str) else v
else:
return "???"
elif part == "journal":
if part in paper and paper[part] is not None:
return paper[part]["name"].strip()
else:
return "???"
elif part == "authors":
if part in paper and paper[part] is not None:
return paper[part][0]["name"].strip()
else:
return "???"
elif part == "tldr":
if part in paper and paper[part] is not None:
return paper[part]["text"].strip()
else:
return "???"
else:
return "<unknown field %s>" % part
def format_paper_list(all_papers, result_limit):
list = ""
sorted_papers = sorted(all_papers, key=lambda d: d["citationCount"], reverse=True)[
:result_limit
]
print(sorted_papers)
for idx, paper in enumerate(sorted_papers):
list += f"{idx}: **{get_element(paper, 'authors')} et al. {get_element(paper, 'year')}**, [{get_element(paper, 'journal')}]({get_element(paper, 'url')}) {get_element(paper, 'title')}. Cited by {get_element(paper, 'citationCount')}\n\n"
if paper["tldr"] and paper["tldr"]["text"]:
list += f"> _{paper['tldr']['text'].strip()}_ \n\n"
return list
if __name__ == "__main__":
find_basis_paper("NeuroML")
|