tldw / App_Function_Libraries /Gradio_UI /Semantic_Scholar_tab.py
oceansweep's picture
Upload 169 files
c5b0bb7 verified
raw
history blame
7.48 kB
# Sematnic_Scholar_tab.py
# Description: contains the code to create the Semantic Scholar tab in the Gradio UI.
#
# Imports
#
# External Libraries
import gradio as gr
#
# Internal Libraries
from App_Function_Libraries.Third_Party.Semantic_Scholar import search_and_display, FIELDS_OF_STUDY, PUBLICATION_TYPES
#
######################################################################################################################
# Functions
def create_semantic_scholar_tab():
"""Create the Semantic Scholar tab for the Gradio UI"""
with gr.Tab("Semantic Scholar Search"):
with gr.Row():
with gr.Column(scale=2):
gr.Markdown("""
## Semantic Scholar Paper Search
This interface allows you to search for academic papers using the Semantic Scholar API with advanced filtering options:
### Search Options
- **Keywords**: Search across titles, abstracts, and other paper content
- **Year Range**: Filter papers by publication year (e.g., "2020-2023" or "2020")
- **Venue**: Filter by publication venue (journal or conference)
- **Minimum Citations**: Filter papers by minimum citation count
- **Fields of Study**: Filter papers by academic field
- **Publication Types**: Filter by type of publication
- **Open Access**: Option to show only papers with free PDF access
### Results Include
- Paper title
- Author list
- Publication year and venue
- Citation count
- Publication types
- Abstract
- Links to PDF (when available) and Semantic Scholar page
""")
with gr.Column(scale=2):
gr.Markdown("""
### Pagination
- 10 results per page
- Navigate through results using Previous/Next buttons
- Current page number and total results displayed
### Usage Tips
- Combine multiple filters for more specific results
- Use specific terms for more focused results
- Try different combinations of filters if you don't find what you're looking for
""")
with gr.Row():
with gr.Column(scale=2):
search_input = gr.Textbox(
label="Search Query",
placeholder="Enter keywords to search for papers...",
lines=1
)
# Advanced search options
with gr.Row():
year_range = gr.Textbox(
label="Year Range",
placeholder="e.g., 2020-2023 or 2020",
lines=1
)
venue = gr.Textbox(
label="Venue",
placeholder="e.g., Nature, Science",
lines=1
)
min_citations = gr.Number(
label="Minimum Citations",
value=0,
minimum=0,
step=1
)
with gr.Row():
fields_of_study = gr.Dropdown(
choices=FIELDS_OF_STUDY,
label="Fields of Study",
multiselect=True,
value=[]
)
publication_types = gr.Dropdown(
choices=PUBLICATION_TYPES,
label="Publication Types",
multiselect=True,
value=[]
)
open_access_only = gr.Checkbox(
label="Open Access Only",
value=False
)
with gr.Column(scale=1):
search_button = gr.Button("Search", variant="primary")
# Pagination controls
with gr.Row():
prev_button = gr.Button("← Previous")
current_page = gr.Number(value=0, label="Page", minimum=0, step=1)
max_page = gr.Number(value=0, label="Max Page", visible=False)
next_button = gr.Button("Next →")
total_results = gr.Textbox(
label="Total Results",
value="0",
interactive=False
)
output_text = gr.Markdown(
label="Results",
value="Use the search options above to find papers."
)
def update_page(direction, current, maximum):
new_page = current + direction
if new_page < 0:
return 0
if new_page > maximum:
return maximum
return new_page
# Handle search and pagination
def search_from_button(query, fields_of_study, publication_types, year_range, venue, min_citations,
open_access_only):
"""Wrapper to always search from page 0 when search button is clicked"""
return search_and_display(
query=query,
page=0, # Force page 0 for new searches
fields_of_study=fields_of_study,
publication_types=publication_types,
year_range=year_range,
venue=venue,
min_citations=min_citations,
open_access_only=open_access_only
)
normal_search = search_and_display
search_button.click(
fn=search_from_button,
inputs=[
search_input, fields_of_study, publication_types,
year_range, venue, min_citations, open_access_only
],
outputs=[output_text, current_page, max_page, total_results]
)
prev_button.click(
fn=lambda curr, max_p: update_page(-1, curr, max_p),
inputs=[current_page, max_page],
outputs=current_page
).then(
fn=normal_search,
inputs=[
search_input, current_page, fields_of_study, publication_types,
year_range, venue, min_citations, open_access_only
],
outputs=[output_text, current_page, max_page, total_results]
)
next_button.click(
fn=lambda curr, max_p: update_page(1, curr, max_p),
inputs=[current_page, max_page],
outputs=current_page
).then(
fn=normal_search,
inputs=[
search_input, current_page, fields_of_study, publication_types,
year_range, venue, min_citations, open_access_only
],
outputs=[output_text, current_page, max_page, total_results]
)
#
# End of Semantic_Scholar_tab.py
######################################################################################################################