Spaces:
Running
Running
Create app.py
Browse files
app.py
CHANGED
@@ -1,2 +1,170 @@
|
|
1 |
-
import
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import numpy as np
|
3 |
+
|
4 |
+
# MBTI μ§λ¬Έ 리μ€νΈ (50λ¬Έν)
|
5 |
+
questions = [
|
6 |
+
# E vs I (13λ¬Έν)
|
7 |
+
"1. λλ μλ‘μ΄ μ¬λλ€κ³Ό λ§λλ κ²μ μ¦κΈ΄λ€.",
|
8 |
+
"2. νΌμλ§μ μκ°μ λ μ νΈνλ€.",
|
9 |
+
"3. λνλ₯Ό λ¨Όμ μμνλ νΈμ΄λ€.",
|
10 |
+
"4. λ§μ μ¬λλ€κ³Ό μ΄μΈλ¦¬λ©΄ μλμ§κ° μμ§λλ€.",
|
11 |
+
"5. νν°λ λͺ¨μμμ μλ‘μ΄ μ¬λλ€κ³Ό λννκΈ°λ₯Ό μ’μνλ€.",
|
12 |
+
"6. μ‘°μ©ν νκ²½μμ νΌμ μΌνλ κ²μ΄ νΈνλ€.",
|
13 |
+
"7. κ·Έλ£Ή νλμ΄λ ν νλ‘μ νΈλ₯Ό μ νΈνλ€.",
|
14 |
+
"8. μ¬νμ λͺ¨μ νμλ νΌμλ§μ μκ°μ΄ νμνλ€.",
|
15 |
+
"9. λ§μ μ¬λλ€ μμμ λ°ννλ κ²μ΄ μ¦κ²λ€.",
|
16 |
+
"10. μΉκ΅¬λ€κ³Ό ν¨κ» μμ λ κ°μ₯ νΈμνλ€.",
|
17 |
+
"11. μλ‘μ΄ νκ²½μ μ μνλ κ²μ΄ μ΄λ ΅μ§ μλ€.",
|
18 |
+
"12. νΌμμ μ¬ννλ κ²μ μ’μνλ€.",
|
19 |
+
"13. λͺ¨μμμ μ€μ¬μ΄ λλ κ²μ΄ μμ°μ€λ½λ€.",
|
20 |
+
|
21 |
+
# S vs N (13λ¬Έν)
|
22 |
+
"14. μ€μ μ μ΄κ³ ꡬ체μ μΈ κ²μ μ νΈνλ€.",
|
23 |
+
"15. μμνκ³ μλ‘μ΄ μμ΄λμ΄λ₯Ό μκ°νλ κ²μ μ’μνλ€.",
|
24 |
+
"16. μΈλΆμ¬νμ μ£Όμλ₯Ό κΈ°μΈμΈλ€.",
|
25 |
+
"17. ν° κ·Έλ¦Όμ 보λ κ²μ μ νΈνλ€.",
|
26 |
+
"18. νμ¬μ μ§μ€νλ νΈμ΄λ€.",
|
27 |
+
"19. λ―Έλμ κ°λ₯μ±μ μμνλ κ²μ μ’μνλ€.",
|
28 |
+
"20. μ€μ©μ μ΄κ³ νμ€μ μΈ ν΄κ²°μ±
μ μ°Ύλλ€.",
|
29 |
+
"21. μλ‘κ³ νμ μ μΈ λ°©λ²μ μλνλ κ²μ μ’μνλ€.",
|
30 |
+
"22. κ²½νμ κΈ°λ°ν νλ¨μ μ νΈνλ€.",
|
31 |
+
"23. μ§κ΄μ μΈ λλμ μ€μνκ² μ¬κΈ΄λ€.",
|
32 |
+
"24. ꡬ체μ μΈ μ¬μ€κ³Ό λ°μ΄ν°λ₯Ό μ€μνλ€.",
|
33 |
+
"25. μΆμμ μΈ κ°λ
μ νꡬνλ κ²μ΄ μ¦κ²λ€.",
|
34 |
+
"26. μ ν΅μ μ΄κ³ κ²μ¦λ λ°©μμ μ νΈνλ€.",
|
35 |
+
|
36 |
+
# T vs F (12λ¬Έν)
|
37 |
+
"27. κ²°μ μ λ΄λ¦΄ λ λ
Όλ¦¬μ μΌλ‘ λΆμνλ€.",
|
38 |
+
"28. λ€λ₯Έ μ¬λμ κ°μ μ μ κ³ λ €νλ€.",
|
39 |
+
"29. κ°κ΄μ μΈ μ¬μ€μ μ€μνκ² μκ°νλ€.",
|
40 |
+
"30. μ§κ°κ³Ό κ°μ μ λ°λ₯΄λ νΈμ΄λ€.",
|
41 |
+
"31. κ°μ λ³΄λ€ μ΄μ±μ λ μ€μνκ² μ¬κΈ΄λ€.",
|
42 |
+
"32. λ€λ₯Έ μ¬λλ€μ κ°μ μνμ λ―Όκ°νλ€.",
|
43 |
+
"33. λ
Όλ¦¬μ μΌκ΄μ±μ μ€μνκ² μκ°νλ€.",
|
44 |
+
"34. 곡κ°λ₯λ ₯μ΄ λ°μ΄λ νΈμ΄λ€.",
|
45 |
+
"35. κ°μ μ κ²°μ μ λ΄λ¦¬λ κ²μ νΌνλ€.",
|
46 |
+
"36. λ€λ₯Έ μ¬λμ μ
μ₯μμ μκ°νλ € λ
Έλ ₯νλ€.",
|
47 |
+
"37. κ°κ΄μ λΆμμ ν΅ν΄ κ²°λ‘ μ λμΆνλ€.",
|
48 |
+
"38. μ¬λλ€ κ°μ μ‘°νλ₯Ό μ€μνκ² μκ°νλ€.",
|
49 |
+
|
50 |
+
# J vs P (12λ¬Έν)
|
51 |
+
"39. κ³νμ μΈμ°κ³ κ·Έλλ‘ μ€ννλ κ²μ μ’μνλ€.",
|
52 |
+
"40. μ΅ν΅μ± μκ² μν©μ λμ²νλ κ²μ μ νΈνλ€.",
|
53 |
+
"41. λ§κ°κΈ°νμ μ νν μ§ν€λ νΈμ΄λ€.",
|
54 |
+
"42. μΌμ μ 미리 μ νκΈ°λ³΄λ€ μ¦ν₯μ μΌλ‘ νλνλ€.",
|
55 |
+
"43. 체κ³μ μΌλ‘ μΌμ μ²λ¦¬νλ κ²μ μ’μνλ€.",
|
56 |
+
"44. μν©μ λ°λΌ κ³νμ λ³κ²½νλ κ²μ΄ μμ°μ€λ½λ€.",
|
57 |
+
"45. ν μΌμ 미리 κ³ννκ³ μ€λΉνλ€.",
|
58 |
+
"46. μλ‘μ΄ κ°λ₯μ±μ μν΄ μ΄λ €μλ κ²μ΄ μ’λ€.",
|
59 |
+
"47. μ ν΄μ§ κ·μΉκ³Ό μ μ°¨λ₯Ό μ λ°λ₯Έλ€.",
|
60 |
+
"48. κΈμμ€λ¬μ΄ λ³νμλ μ μ μνλ€.",
|
61 |
+
"49. μΌμ μλ£λ₯Ό μ€μνκ² μκ°νλ€.",
|
62 |
+
"50. μ¬λ¬ μ νμ§λ₯Ό μ€λ μ΄μ΄λλ κ²μ μ νΈνλ€."
|
63 |
+
]
|
64 |
+
|
65 |
+
def calculate_mbti(scores):
|
66 |
+
try:
|
67 |
+
# μ μλ₯Ό floatλ‘ λ³ννκ³ μ ν¨μ± κ²μ¬
|
68 |
+
scores = [float(score) if score is not None else 3.0 for score in scores]
|
69 |
+
if not all(1 <= score <= 5 for score in scores):
|
70 |
+
return "μ€λ₯: λͺ¨λ μ μλ 1μμ 5 μ¬μ΄μ¬μΌ ν©λλ€."
|
71 |
+
|
72 |
+
# μμ±μ μ΄ νμν λ¬Έν μ²λ¦¬
|
73 |
+
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]
|
74 |
+
for i in reverse_questions:
|
75 |
+
scores[i-1] = 6 - scores[i-1]
|
76 |
+
|
77 |
+
# μ μ κ³μ°
|
78 |
+
E = sum(scores[0:13]) # 13λ¬Έν
|
79 |
+
S = sum(scores[13:26]) # 13λ¬Έν
|
80 |
+
T = sum(scores[26:38]) # 12λ¬Έν
|
81 |
+
J = sum(scores[38:50]) # 12λ¬Έν
|
82 |
+
|
83 |
+
# μ΅λ μ μ κ³μ°
|
84 |
+
max_ei = 13 * 5 # E/I μ΅λμ μ
|
85 |
+
max_sn = 13 * 5 # S/N μ΅λμ μ
|
86 |
+
max_tf = 12 * 5 # T/F μ΅λμ μ
|
87 |
+
max_jp = 12 * 5 # J/P μ΅λμ μ
|
88 |
+
|
89 |
+
# MBTI μ ν κ²°μ
|
90 |
+
mbti = ""
|
91 |
+
mbti += "E" if E > max_ei/2 else "I"
|
92 |
+
mbti += "S" if S > max_sn/2 else "N"
|
93 |
+
mbti += "T" if T > max_tf/2 else "F"
|
94 |
+
mbti += "J" if J > max_jp/2 else "P"
|
95 |
+
|
96 |
+
# κ° νΉμ±μ κ°λ κ³μ° (λ°±λΆμ¨)
|
97 |
+
e_score = (E / max_ei) * 100
|
98 |
+
s_score = (S / max_sn) * 100
|
99 |
+
t_score = (T / max_tf) * 100
|
100 |
+
j_score = (J / max_jp) * 100
|
101 |
+
|
102 |
+
result = f"""
|
103 |
+
λΉμ μ MBTI μ νμ {mbti}μ
λλ€.
|
104 |
+
|
105 |
+
μΈλΆ μ±ν₯ λΆμ:
|
106 |
+
μΈν₯(E) vs λ΄ν₯(I): {e_score:.1f}% vs {100-e_score:.1f}%
|
107 |
+
κ°κ°(S) vs μ§κ΄(N): {s_score:.1f}% vs {100-s_score:.1f}%
|
108 |
+
μ¬κ³ (T) vs κ°μ (F): {t_score:.1f}% vs {100-t_score:.1f}%
|
109 |
+
νλ¨(J) vs μΈμ(P): {j_score:.1f}% vs {100-j_score:.1f}%
|
110 |
+
|
111 |
+
μ±ν₯ κ°λ ν΄μ:
|
112 |
+
- λ§€μ° κ°ν¨: 70% μ΄μ
|
113 |
+
- κ°ν¨: 60-69%
|
114 |
+
- 보ν΅: 40-59%
|
115 |
+
- μ½ν¨: 31-39%
|
116 |
+
- λ§€μ° μ½ν¨: 30% μ΄ν
|
117 |
+
|
118 |
+
β» κ° μ±ν₯μ΄ 50%μ κ°κΉμΈμλ‘ μμͺ½ νΉμ±μ κ· νμκ² μ¬μ©ν μ μμμ μλ―Έν©λλ€.
|
119 |
+
β» κ²μ¬ κ²°κ³Όλ μ°Έκ³ μ©μ΄λ©°, μ€μ μ±κ²© μ νκ³Ό λ€λ₯Ό μ μμ΅λλ€.
|
120 |
+
"""
|
121 |
+
|
122 |
+
return result
|
123 |
+
|
124 |
+
except Exception as e:
|
125 |
+
return f"μ€λ₯κ° λ°μνμ΅λλ€: {str(e)}\nλͺ¨λ μ§λ¬Έμ λ΅λ³νλμ§ νμΈν΄μ£ΌμΈμ."
|
126 |
+
|
127 |
+
def create_test():
|
128 |
+
with gr.Blocks(title="MBTI μ±κ²©μ ν κ²μ¬") as app:
|
129 |
+
gr.Markdown("""
|
130 |
+
# MBTI μ±κ²©μ ν κ²μ¬ (50λ¬Έν)
|
131 |
+
κ° μ§λ¬Έμ λν΄ 1(μ ν μλλ€)λΆν° 5(λ§€μ° κ·Έλ λ€)κΉμ§ μλ΅ν΄μ£ΌμΈμ.
|
132 |
+
λμ± μ νν κ²°κ³Όλ₯Ό μν΄ λͺ¨λ μ§λ¬Έμ μμ§νκ² λ΅λ³ν΄ μ£ΌμκΈ° λ°λλλ€.
|
133 |
+
""")
|
134 |
+
|
135 |
+
with gr.Column():
|
136 |
+
# μ§λ¬Έλ³ μ¬λΌμ΄λ μμ±
|
137 |
+
sliders = []
|
138 |
+
for i, q in enumerate(questions, 1):
|
139 |
+
slider = gr.Slider(
|
140 |
+
minimum=1,
|
141 |
+
maximum=5,
|
142 |
+
step=1,
|
143 |
+
value=3,
|
144 |
+
label=q,
|
145 |
+
info="1: μ ν μλλ€ ~ 5: λ§€μ° κ·Έλ λ€"
|
146 |
+
)
|
147 |
+
sliders.append(slider)
|
148 |
+
|
149 |
+
submit_btn = gr.Button("κ²°κ³Ό νμΈ")
|
150 |
+
result_text = gr.Textbox(label="κ²μ¬ κ²°κ³Ό", lines=12)
|
151 |
+
|
152 |
+
# μλ¬ μ²λ¦¬λ₯Ό ν¬ν¨ν μ μΆ ν¨μ
|
153 |
+
def safe_submit(*args):
|
154 |
+
try:
|
155 |
+
return calculate_mbti(args)
|
156 |
+
except Exception as e:
|
157 |
+
return f"μ€λ₯κ° λ°μνμ΅λλ€: {str(e)}"
|
158 |
+
|
159 |
+
submit_btn.click(
|
160 |
+
fn=safe_submit,
|
161 |
+
inputs=sliders,
|
162 |
+
outputs=result_text
|
163 |
+
)
|
164 |
+
|
165 |
+
return app
|
166 |
+
|
167 |
+
# μ ν리μΌμ΄μ
μ€ν
|
168 |
+
if __name__ == "__main__":
|
169 |
+
app = create_test()
|
170 |
+
app.launch()
|