import dimcli import pandas as pd import sys import os import streamlit as st import scholarpy if "dsl" not in st.session_state: st.session_state["dsl"] = scholarpy.Dsl() @st.cache_data def the_H_function(sorted_citations_list, n=1): """from a list of integers [n1, n2 ..] representing publications citations, return the max list-position which is >= integer eg >>> the_H_function([10, 8, 5, 4, 3]) => 4 >>> the_H_function([25, 8, 5, 3, 3]) => 3 >>> the_H_function([1000, 20]) => 2 """ if sorted_citations_list and sorted_citations_list[0] >= n: return the_H_function(sorted_citations_list[1:], n + 1) else: return n - 1 def dim_login(key=None, endpoint=None): if key is None: KEY = os.environ.get("DIM_TOKEN") if endpoint is None: ENDPOINT = "https://app.dimensions.ai" try: dimcli.login(key=KEY, endpoint=ENDPOINT) dsl = dimcli.Dsl() return dsl except: raise Exception("Failed to login to Dimensions") @st.cache_data def get_pubs_df(dsl, researcher_id): q = """search publications where researchers.id = "{}" return publications[id+title+doi+times_cited] sort by times_cited limit 1000""" pubs = dsl.query(q.format(researcher_id)) return pubs.as_dataframe() @st.cache_data def get_citations(df): return list(df.fillna(0)["times_cited"]) def app(): dsl = st.session_state["dsl"] researchER_id = st.text_input("Enter researcher ID:", "ur.013632443777.66") df = get_pubs_df(dsl, researchER_id) st.dataframe(df) citations = get_citations(df) h_index = the_H_function(citations) st.write(f"H-index: {h_index}")