File size: 3,026 Bytes
35bb374
 
 
 
62a9f71
35bb374
 
 
92ef844
caa30dd
3570148
caa30dd
3570148
 
 
 
 
35bb374
3570148
bffee5c
92ef844
 
 
 
b8fea6f
35bb374
 
 
22c7097
63e67b9
62a9f71
5976c88
35bb374
5976c88
35bb374
 
 
 
 
 
92ef844
3570148
35bb374
92ef844
1d772ce
92ef844
 
 
35bb374
92ef844
 
35bb374
 
92ef844
 
35bb374
 
92ef844
 
b8fea6f
35bb374
 
fc50377
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
import gradio as gr
import pandas as pd

# Load the DataFrame
url = "TExam_new1014.csv"
df = pd.read_csv(url, encoding='utf-8-sig')

# Function to search years based on the selected mode
def search_years(search_mode, query):
    if search_mode == "Search questions by YEAR":
        matches = df[df['YEAR'].str.startswith(query.strip()[:4])]  # Ensure query is stripped of whitespace
    elif search_mode == "Search questions by Keywords":
        keyword_list = [keyword.strip().lower() for keyword in query.split(',')]
        matches = df[df['KEYWORDS'].str.lower().apply(lambda x: any(keyword in x for keyword in keyword_list))]
    elif search_mode == "Search questions by Words":
        word_list = [word.strip().lower() for word in query.split(',')]
        matches = df[df['TEXT'].str.lower().apply(lambda x: any(word in x for word in word_list))]
    else:
        return [], "Please select a valid search mode."

    if matches.empty:
        return [], "No results found for your query."
    return matches['YEAR'].tolist(), "Search completed successfully."

# Function to get image HTML
def get_image_html(year):
    match = df[df['YEAR'] == year]
    if not match.empty:
        image_filename = match.iloc[0]['Filename']
        image_url = f'https://huggingface.co/spaces/MK-316/TCE/raw/main/TExams/{image_filename}'
        keywords = match.iloc[0]['TEXT']
        return f"<b>🌷 Keywords:</b> πŸ”‘ {keywords}<br><img src='{image_url}' width='800'/>"
    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")
    
    # Radio buttons to select search mode
    search_mode = gr.Radio(choices=["Search questions by YEAR", "Search questions by Keywords", "Search questions by Words"], label="Search Mode")
    
    # Row for search query and button
    search_input = gr.Textbox(label="Search Query: e.g., 2024 (by YEAR) or tapping (by Keywords or Words)", placeholder="Enter year or keywords or words")
    search_button = gr.Button("Click to Search")
    search_output = gr.Dropdown(label="Results (file names)", choices=[], visible=False)
    status_output = gr.Textbox(label="Status", visible=False)
    
    # Connect actions
    search_button.click(fn=search_years, inputs=[search_mode, search_input], outputs=[search_output, status_output])
    
    gr.Markdown("## ❄️ [2] Display a Specific Exam Question Requested")
    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 dropdown and image display
    search_output.change(fn=lambda results: gr.update(choices=results), inputs=search_output, outputs=year_input)
    submit_button.click(fn=get_image_html, inputs=year_input, outputs=image_output)

# Launch the app with sharing options
app.launch(debug=True)