Spaces:
Runtime error
Runtime error
| # 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 | |
| ###################################################################################################################### | |