Update app.py
Browse files
app.py
CHANGED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import numpy as np
|
3 |
+
|
4 |
+
# MBTI 질문 데이터
|
5 |
+
questions = [
|
6 |
+
"나는 사람들과 시간을 보내는 것을 즐긴다.",
|
7 |
+
"나는 구체적이고 실용적인 정보를 선호한다.",
|
8 |
+
"나는 논리적인 결정을 내리는 것을 중요하게 생각한다.",
|
9 |
+
"나는 체계적이고 계획적인 삶을 좋아한다.",
|
10 |
+
"나는 새로운 아이디어를 탐구하는 것을 즐긴다.",
|
11 |
+
# 추가 질문 작성 (총 20개 이상)
|
12 |
+
]
|
13 |
+
|
14 |
+
# 유형별 설명 데이터
|
15 |
+
mbti_descriptions = {
|
16 |
+
"INTJ": {
|
17 |
+
"성격": "독립적이고 전략적인 사고를 가진 성향.",
|
18 |
+
"추천 직업": ["데이터 분석가", "소프트웨어 개발자", "연구원"],
|
19 |
+
"궁합": {
|
20 |
+
"좋은": ("ENTP", "혁신적이고 유연한 사고가 잘 맞음."),
|
21 |
+
"나쁜": ("ISFP", "감정과 논리의 차이가 충돌할 가능성.")
|
22 |
+
}
|
23 |
+
},
|
24 |
+
# 다른 유형 데이터 추가
|
25 |
+
}
|
26 |
+
|
27 |
+
# 선택지를 5단계로 설정
|
28 |
+
options = ["매우 아니다", "아니다", "보통이다", "그렇다", "매우 그렇다"]
|
29 |
+
|
30 |
+
def calculate_mbti(answers):
|
31 |
+
scores = {"E/I": 0, "S/N": 0, "T/F": 0, "J/P": 0}
|
32 |
+
for i, answer in enumerate(answers):
|
33 |
+
if i % 4 == 0:
|
34 |
+
scores["E/I"] += (answer - 3)
|
35 |
+
elif i % 4 == 1:
|
36 |
+
scores["S/N"] += (answer - 3)
|
37 |
+
elif i % 4 == 2:
|
38 |
+
scores["T/F"] += (answer - 3)
|
39 |
+
elif i % 4 == 3:
|
40 |
+
scores["J/P"] += (answer - 3)
|
41 |
+
result = (
|
42 |
+
("I" if scores["E/I"] < 0 else "E") +
|
43 |
+
("N" if scores["S/N"] < 0 else "S") +
|
44 |
+
("F" if scores["T/F"] < 0 else "T") +
|
45 |
+
("P" if scores["J/P"] < 0 else "J")
|
46 |
+
)
|
47 |
+
percentages = {
|
48 |
+
"E/I": abs(scores["E/I"] / 20 * 100),
|
49 |
+
"S/N": abs(scores["S/N"] / 20 * 100),
|
50 |
+
"T/F": abs(scores["T/F"] / 20 * 100),
|
51 |
+
"J/P": abs(scores["J/P"] / 20 * 100)
|
52 |
+
}
|
53 |
+
return result, percentages
|
54 |
+
|
55 |
+
def analyze_mbti(answers):
|
56 |
+
result, percentages = calculate_mbti(answers)
|
57 |
+
description = mbti_descriptions.get(result, {})
|
58 |
+
성격 = description.get("성격", "데이터가 없습니다.")
|
59 |
+
추천직업 = description.get("추천 직업", [])
|
60 |
+
궁합 = description.get("궁합", {})
|
61 |
+
return {
|
62 |
+
"MBTI 유형": result,
|
63 |
+
"성격": 성격,
|
64 |
+
"추천 직업": 추천직업,
|
65 |
+
"궁합": 궁합,
|
66 |
+
"세부 비율": percentages
|
67 |
+
}
|
68 |
+
|
69 |
+
# Gradio 인터페이스
|
70 |
+
def mbti_interface(*answers):
|
71 |
+
answers = list(answers)
|
72 |
+
result = analyze_mbti(answers)
|
73 |
+
return result
|
74 |
+
|
75 |
+
# 질문과 선택지를 기반으로 Gradio UI 생성
|
76 |
+
inputs = [gr.Radio(options, label=q) for q in questions]
|
77 |
+
outputs = gr.JSON()
|
78 |
+
|
79 |
+
iface = gr.Interface(
|
80 |
+
fn=mbti_interface,
|
81 |
+
inputs=inputs,
|
82 |
+
outputs=outputs,
|
83 |
+
title="MBTI 분석기",
|
84 |
+
description="질문에 답변하고 자신의 MBTI 유형을 분석해 보세요!"
|
85 |
+
)
|
86 |
+
|
87 |
+
if __name__ == "__main__":
|
88 |
+
iface.launch()
|