import gradio as gr import pandas as pd # Load the DataFrame url = "TExam_new.csv" df = pd.read_csv(url, encoding='utf-8-sig') # Function to search years based on the selected mode def search_years(search_by_year, search_by_keywords, query): if search_by_year and not search_by_keywords: # Search by matching the first four characters of the 'YEAR' column matches = df[df['YEAR'].str.startswith(query[:4])] if matches.empty: return [], "No results found for your query." return matches['YEAR'].tolist(), "Search completed successfully." elif search_by_keywords and not search_by_year: # Original keyword search logic keyword_list = [keyword.strip() for keyword in query.split(',')] matches = df[df['KEYWORDS'].apply(lambda x: any(keyword in x for keyword in keyword_list))] if matches.empty: return [], "No results found for your query." return matches['YEAR'].tolist(), "Search completed successfully." else: return [], "Please select exactly one search mode." # Function to get image HTML def get_image_html(year): match = df[df['YEAR'] == year] if not match.empty: # Assuming 'LINK' column has the partial path like '2006_1.PNG' image_filename = match.iloc[0]['Filename'] # Construct the full URL by appending the filename to the base path image_url = f'https://huggingface.co/spaces/MK-316/TCE/raw/main/TExams/{image_filename}' keywords = match.iloc[0]['KEYWORDS'] # Place keywords above the image return f"🌷 Keywords: 🔑 {keywords}
" else: return "No keywords found for this year.", "No image found for this year." # Create Gradio Blocks interface with gr.Blocks() as app: gr.Markdown("# Teacher Certificate Exam Searching Engine") gr.Markdown("## ❄️ [1] Search Data") # Row for checkboxes with gr.Row(): search_by_year = gr.Checkbox(label="Search by YEAR", value=False) search_by_keywords = gr.Checkbox(label="Search Years by Keywords", value=False) # Row for search query, button and output with gr.Row(): search_input = gr.Textbox(label="Search Query: e.g., 2024 (by YEAR) or tapping (by Keywords)", placeholder="Enter year or keywords separated by commas") search_button = gr.Button("Click to Search") search_output = gr.Dropdown(label="Results (file names)", choices=[], visible=False) # Hidden dropdown for results status_output = gr.Textbox(label="Status", visible=False) # Hidden status textbox # Define actions def update_dropdown(results, status_message): return gr.update(choices=results), status_message search_button.click(fn=search_years, inputs=[search_by_year, search_by_keywords, search_input], outputs=[search_output, status_output], postprocess=update_dropdown) gr.Markdown("## ❄️ [2] Display a Specific Exam Question Requested") with gr.Row(): year_input = gr.Dropdown(label="Select a file name from the results", choices=[]) submit_button = gr.Button("Show me the exam question") image_output = gr.HTML() # Update the year input dropdown based on the search results def update_year_input(results): return gr.update(choices=results) search_output.change(fn=update_year_input, inputs=search_output, outputs=year_input) # Define action for the submit button submit_button.click(fn=get_image_html, inputs=year_input, outputs=image_output) # Launch the app with sharing options app.launch(debug=True)