Spaces:
Running
Running
import gradio as gr | |
import numpy as np | |
# MBTI μ§λ¬Έ 리μ€νΈ (50λ¬Έν) | |
questions = [ | |
# E vs I (13λ¬Έν) | |
"1. λλ μλ‘μ΄ μ¬λλ€κ³Ό λ§λλ κ²μ μ¦κΈ΄λ€.", | |
"2. νΌμλ§μ μκ°μ λ μ νΈνλ€.", | |
"3. λνλ₯Ό λ¨Όμ μμνλ νΈμ΄λ€.", | |
"4. λ§μ μ¬λλ€κ³Ό μ΄μΈλ¦¬λ©΄ μλμ§κ° μμ§λλ€.", | |
"5. νν°λ λͺ¨μμμ μλ‘μ΄ μ¬λλ€κ³Ό λννκΈ°λ₯Ό μ’μνλ€.", | |
"6. μ‘°μ©ν νκ²½μμ νΌμ μΌνλ κ²μ΄ νΈνλ€.", | |
"7. κ·Έλ£Ή νλμ΄λ ν νλ‘μ νΈλ₯Ό μ νΈνλ€.", | |
"8. μ¬νμ λͺ¨μ νμλ νΌμλ§μ μκ°μ΄ νμνλ€.", | |
"9. λ§μ μ¬λλ€ μμμ λ°ννλ κ²μ΄ μ¦κ²λ€.", | |
"10. μΉκ΅¬λ€κ³Ό ν¨κ» μμ λ κ°μ₯ νΈμνλ€.", | |
"11. μλ‘μ΄ νκ²½μ μ μνλ κ²μ΄ μ΄λ ΅μ§ μλ€.", | |
"12. νΌμμ μ¬ννλ κ²μ μ’μνλ€.", | |
"13. λͺ¨μμμ μ€μ¬μ΄ λλ κ²μ΄ μμ°μ€λ½λ€.", | |
# S vs N (13λ¬Έν) | |
"14. μ€μ μ μ΄κ³ ꡬ체μ μΈ κ²μ μ νΈνλ€.", | |
"15. μμνκ³ μλ‘μ΄ μμ΄λμ΄λ₯Ό μκ°νλ κ²μ μ’μνλ€.", | |
"16. μΈλΆμ¬νμ μ£Όμλ₯Ό κΈ°μΈμΈλ€.", | |
"17. ν° κ·Έλ¦Όμ 보λ κ²μ μ νΈνλ€.", | |
"18. νμ¬μ μ§μ€νλ νΈμ΄λ€.", | |
"19. λ―Έλμ κ°λ₯μ±μ μμνλ κ²μ μ’μνλ€.", | |
"20. μ€μ©μ μ΄κ³ νμ€μ μΈ ν΄κ²°μ± μ μ°Ύλλ€.", | |
"21. μλ‘κ³ νμ μ μΈ λ°©λ²μ μλνλ κ²μ μ’μνλ€.", | |
"22. κ²½νμ κΈ°λ°ν νλ¨μ μ νΈνλ€.", | |
"23. μ§κ΄μ μΈ λλμ μ€μνκ² μ¬κΈ΄λ€.", | |
"24. ꡬ체μ μΈ μ¬μ€κ³Ό λ°μ΄ν°λ₯Ό μ€μνλ€.", | |
"25. μΆμμ μΈ κ°λ μ νꡬνλ κ²μ΄ μ¦κ²λ€.", | |
"26. μ ν΅μ μ΄κ³ κ²μ¦λ λ°©μμ μ νΈνλ€.", | |
# T vs F (12λ¬Έν) | |
"27. κ²°μ μ λ΄λ¦΄ λ λ Όλ¦¬μ μΌλ‘ λΆμνλ€.", | |
"28. λ€λ₯Έ μ¬λμ κ°μ μ μ κ³ λ €νλ€.", | |
"29. κ°κ΄μ μΈ μ¬μ€μ μ€μνκ² μκ°νλ€.", | |
"30. μ§κ°κ³Ό κ°μ μ λ°λ₯΄λ νΈμ΄λ€.", | |
"31. κ°μ λ³΄λ€ μ΄μ±μ λ μ€μνκ² μ¬κΈ΄λ€.", | |
"32. λ€λ₯Έ μ¬λλ€μ κ°μ μνμ λ―Όκ°νλ€.", | |
"33. λ Όλ¦¬μ μΌκ΄μ±μ μ€μνκ² μκ°νλ€.", | |
"34. 곡κ°λ₯λ ₯μ΄ λ°μ΄λ νΈμ΄λ€.", | |
"35. κ°μ μ κ²°μ μ λ΄λ¦¬λ κ²μ νΌνλ€.", | |
"36. λ€λ₯Έ μ¬λμ μ μ₯μμ μκ°νλ € λ Έλ ₯νλ€.", | |
"37. κ°κ΄μ λΆμμ ν΅ν΄ κ²°λ‘ μ λμΆνλ€.", | |
"38. μ¬λλ€ κ°μ μ‘°νλ₯Ό μ€μνκ² μκ°νλ€.", | |
# J vs P (12λ¬Έν) | |
"39. κ³νμ μΈμ°κ³ κ·Έλλ‘ μ€ννλ κ²μ μ’μνλ€.", | |
"40. μ΅ν΅μ± μκ² μν©μ λμ²νλ κ²μ μ νΈνλ€.", | |
"41. λ§κ°κΈ°νμ μ νν μ§ν€λ νΈμ΄λ€.", | |
"42. μΌμ μ 미리 μ νκΈ°λ³΄λ€ μ¦ν₯μ μΌλ‘ νλνλ€.", | |
"43. 체κ³μ μΌλ‘ μΌμ μ²λ¦¬νλ κ²μ μ’μνλ€.", | |
"44. μν©μ λ°λΌ κ³νμ λ³κ²½νλ κ²μ΄ μμ°μ€λ½λ€.", | |
"45. ν μΌμ 미리 κ³ννκ³ μ€λΉνλ€.", | |
"46. μλ‘μ΄ κ°λ₯μ±μ μν΄ μ΄λ €μλ κ²μ΄ μ’λ€.", | |
"47. μ ν΄μ§ κ·μΉκ³Ό μ μ°¨λ₯Ό μ λ°λ₯Έλ€.", | |
"48. κΈμμ€λ¬μ΄ λ³νμλ μ μ μνλ€.", | |
"49. μΌμ μλ£λ₯Ό μ€μνκ² μκ°νλ€.", | |
"50. μ¬λ¬ μ νμ§λ₯Ό μ€λ μ΄μ΄λλ κ²μ μ νΈνλ€." | |
] | |
def calculate_mbti(scores): | |
try: | |
# μ μλ₯Ό floatλ‘ λ³ννκ³ μ ν¨μ± κ²μ¬ | |
scores = [float(score) if score is not None else 3.0 for score in scores] | |
if not all(1 <= score <= 5 for score in scores): | |
return "μ€λ₯: λͺ¨λ μ μλ 1μμ 5 μ¬μ΄μ¬μΌ ν©λλ€." | |
# μμ±μ μ΄ νμν λ¬Έν μ²λ¦¬ | |
reverse_questions = [2, 4, 6, 8, 12, 15, 17, 19, 21, 23, 25, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50] | |
for i in reverse_questions: | |
scores[i-1] = 6 - scores[i-1] | |
# μ μ κ³μ° | |
E = sum(scores[0:13]) # 13λ¬Έν | |
S = sum(scores[13:26]) # 13λ¬Έν | |
T = sum(scores[26:38]) # 12λ¬Έν | |
J = sum(scores[38:50]) # 12λ¬Έν | |
# μ΅λ μ μ κ³μ° | |
max_ei = 13 * 5 # E/I μ΅λμ μ | |
max_sn = 13 * 5 # S/N μ΅λμ μ | |
max_tf = 12 * 5 # T/F μ΅λμ μ | |
max_jp = 12 * 5 # J/P μ΅λμ μ | |
# MBTI μ ν κ²°μ | |
mbti = "" | |
mbti += "E" if E > max_ei/2 else "I" | |
mbti += "S" if S > max_sn/2 else "N" | |
mbti += "T" if T > max_tf/2 else "F" | |
mbti += "J" if J > max_jp/2 else "P" | |
# κ° νΉμ±μ κ°λ κ³μ° (λ°±λΆμ¨) | |
e_score = (E / max_ei) * 100 | |
s_score = (S / max_sn) * 100 | |
t_score = (T / max_tf) * 100 | |
j_score = (J / max_jp) * 100 | |
result = f""" | |
λΉμ μ MBTI μ νμ {mbti}μ λλ€. | |
μΈλΆ μ±ν₯ λΆμ: | |
μΈν₯(E) vs λ΄ν₯(I): {e_score:.1f}% vs {100-e_score:.1f}% | |
κ°κ°(S) vs μ§κ΄(N): {s_score:.1f}% vs {100-s_score:.1f}% | |
μ¬κ³ (T) vs κ°μ (F): {t_score:.1f}% vs {100-t_score:.1f}% | |
νλ¨(J) vs μΈμ(P): {j_score:.1f}% vs {100-j_score:.1f}% | |
μ±ν₯ κ°λ ν΄μ: | |
- λ§€μ° κ°ν¨: 70% μ΄μ | |
- κ°ν¨: 60-69% | |
- 보ν΅: 40-59% | |
- μ½ν¨: 31-39% | |
- λ§€μ° μ½ν¨: 30% μ΄ν | |
β» κ° μ±ν₯μ΄ 50%μ κ°κΉμΈμλ‘ μμͺ½ νΉμ±μ κ· νμκ² μ¬μ©ν μ μμμ μλ―Έν©λλ€. | |
β» κ²μ¬ κ²°κ³Όλ μ°Έκ³ μ©μ΄λ©°, μ€μ μ±κ²© μ νκ³Ό λ€λ₯Ό μ μμ΅λλ€. | |
""" | |
return result | |
except Exception as e: | |
return f"μ€λ₯κ° λ°μνμ΅λλ€: {str(e)}\nλͺ¨λ μ§λ¬Έμ λ΅λ³νλμ§ νμΈν΄μ£ΌμΈμ." | |
def create_test(): | |
with gr.Blocks(title="MBTI μ±κ²©μ ν κ²μ¬") as app: | |
gr.Markdown(""" | |
# MBTI μ±κ²©μ ν κ²μ¬ (50λ¬Έν) | |
κ° μ§λ¬Έμ λν΄ 1(μ ν μλλ€)λΆν° 5(λ§€μ° κ·Έλ λ€)κΉμ§ μλ΅ν΄μ£ΌμΈμ. | |
λμ± μ νν κ²°κ³Όλ₯Ό μν΄ λͺ¨λ μ§λ¬Έμ μμ§νκ² λ΅λ³ν΄ μ£ΌμκΈ° λ°λλλ€. | |
""") | |
with gr.Column(): | |
# μ§λ¬Έλ³ μ¬λΌμ΄λ μμ± | |
sliders = [] | |
for i, q in enumerate(questions, 1): | |
slider = gr.Slider( | |
minimum=1, | |
maximum=5, | |
step=1, | |
value=3, | |
label=q, | |
info="1: μ ν μλλ€ ~ 5: λ§€μ° κ·Έλ λ€" | |
) | |
sliders.append(slider) | |
submit_btn = gr.Button("κ²°κ³Ό νμΈ") | |
result_text = gr.Textbox(label="κ²μ¬ κ²°κ³Ό", lines=12) | |
# μλ¬ μ²λ¦¬λ₯Ό ν¬ν¨ν μ μΆ ν¨μ | |
def safe_submit(*args): | |
try: | |
return calculate_mbti(args) | |
except Exception as e: | |
return f"μ€λ₯κ° λ°μνμ΅λλ€: {str(e)}" | |
submit_btn.click( | |
fn=safe_submit, | |
inputs=sliders, | |
outputs=result_text | |
) | |
return app | |
# μ ν리μΌμ΄μ μ€ν | |
if __name__ == "__main__": | |
app = create_test() | |
app.launch() |