Spaces:
Running
Running
File size: 7,121 Bytes
0f8e312 |
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
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() |