Spaces:
Runtime error
Runtime error
File size: 3,700 Bytes
1d5a1b0 |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import gradio as gr
import pandas as pd
import PyPDF2
import json
import re
# Parse uploaded transcript file
def parse_transcript(file):
if file.name.endswith('.csv'):
df = pd.read_csv(file.name)
elif file.name.endswith(('.xls', '.xlsx')):
df = pd.read_excel(file.name)
elif file.name.endswith('.pdf'):
reader = PyPDF2.PdfReader(file)
text = ""
for page in reader.pages:
text += page.extract_text() or ""
df = pd.DataFrame({'Transcript_Text': [text]})
else:
raise ValueError("Unsupported file format. Use .csv, .xlsx, or .pdf")
return df
# Extract student info
def extract_transcript_info(df):
transcript_text = df['Transcript_Text'].iloc[0] if 'Transcript_Text' in df.columns else ''
info = {}
gpa_match = re.search(r'(GPA|Grade Point Average)[^\d]*(\d+\.\d+)', transcript_text, re.IGNORECASE)
if gpa_match:
info['GPA'] = gpa_match.group(2)
grade_match = re.search(r'Grade:?\s*(\d{1,2})', transcript_text, re.IGNORECASE)
if grade_match:
info['Grade_Level'] = grade_match.group(1)
courses = re.findall(r'(?i)\b([A-Z][a-zA-Z\s&/]+)\s+(\d{1,3})\b', transcript_text)
if courses:
info['Courses'] = list(set([c[0].strip() for c in courses]))
return info
# Learning style questions
def learning_style_quiz(q1, q2, q3):
scores = {'visual': 0, 'auditory': 0, 'reading/writing': 0, 'kinesthetic': 0}
mapping = [q1, q2, q3]
for answer in mapping:
scores[answer] += 1
best = max(scores, key=scores.get)
return best.capitalize()
# Save all answers into profile
def save_profile(file, q1, q2, q3, about_me, blog_text, blog_opt_in):
df = parse_transcript(file)
transcript_info = extract_transcript_info(df)
learning_type = learning_style_quiz(q1, q2, q3)
if not blog_opt_in and blog_text.strip() == "":
blog_text = "[User chose to skip this section]"
profile = {
"transcript": df.to_dict(orient='records'),
"transcript_info": transcript_info,
"learning_style": learning_type,
"about_me": about_me,
"blog": blog_text
}
with open("student_profile.json", "w") as f:
json.dump(profile, f, indent=4)
return f"โ
Profile saved! Your learning style is: {learning_type}"
# Build Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## ๐ Personalized AI Student Assistant")
with gr.Row():
file = gr.File(label="๐ Upload Your Transcript (.csv, .xlsx, .pdf)")
with gr.Column():
gr.Markdown("### ๐ง Learning Style Discovery")
q1 = gr.Radio(["visual", "auditory", "reading/writing", "kinesthetic"], label="1. How do you prefer to learn new topics?")
q2 = gr.Radio(["visual", "auditory", "reading/writing", "kinesthetic"], label="2. How do you remember lists best?")
q3 = gr.Radio(["visual", "auditory", "reading/writing", "kinesthetic"], label="3. Favorite way to study?")
with gr.Column():
gr.Markdown("### โค๏ธ About You")
about_me = gr.Textbox(lines=6, label="Answer a few questions: \n1. Whatโs a fun fact about you? \n2. Favorite music/artist? \n3. Your dream job?")
blog_opt_in = gr.Checkbox(label="I want to write a personal blog for better personalization")
blog_text = gr.Textbox(lines=5, label="โ๏ธ Optional: Write a mini blog about your life", visible=True)
submit = gr.Button("๐ฅ Save My Profile")
output = gr.Textbox(label="Status")
submit.click(fn=save_profile,
inputs=[file, q1, q2, q3, about_me, blog_text, blog_opt_in],
outputs=[output])
if __name__ == '__main__':
demo.launch() |