File size: 3,011 Bytes
35bb374
 
 
 
62a9f71
35bb374
 
 
92ef844
 
35bb374
92ef844
35bb374
1d772ce
 
 
 
35bb374
b8fea6f
bffee5c
92ef844
 
 
 
b8fea6f
35bb374
 
 
22c7097
63e67b9
62a9f71
5976c88
35bb374
5976c88
35bb374
 
 
 
 
 
92ef844
1d772ce
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 by YEAR":
        matches = df[df['YEAR'].str.startswith(query[:4])]
    elif search_mode == "Search Years by Keywords":
        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))]  # Search in 'KEYWORDS'
    elif search_mode == "Search Years by Words":  # New option for 'Search by Words'
        word_list = [word.strip() for word in query.split(',')]
        matches = df[df['TEXT'].apply(lambda x: any(word in x for word in word_list))]  # Search in 'TEXT'
    else:
        return [], "Please select exactly one 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 by YEAR", "Search Years by Keywords", "Search Years by Words"], label="Search Mode")  # Added 'Search by Words'
    
    # 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)