taeyeol commited on
Commit
e3cb813
·
verified ·
1 Parent(s): 2d76448

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +88 -0
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()