aliceblue11 commited on
Commit
8ce5137
·
verified ·
1 Parent(s): b11ddcd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -48
app.py CHANGED
@@ -2,21 +2,28 @@ import gradio as gr
2
 
3
  # 질문 설정 (총 20개로 축소)
4
  questions = [
 
5
  "나는 다른 사람들과 함께 있을 때 에너지를 얻는다.",
6
  "나는 새로운 사람들과 쉽게 친해지는 편이다.",
7
  "나는 대규모 모임을 즐긴다.",
8
  "나는 혼자 보내는 시간이 편하다.",
9
  "나는 친구들과 대화하는 시간이 즐겁다.",
 
 
10
  "나는 현실적이고 구체적인 정보를 선호한다.",
11
  "나는 과거의 경험을 바탕으로 결정을 내린다.",
12
  "나는 큰 그림보다는 세부사항에 집중한다.",
13
  "나는 새로운 아이디어보다는 실질적인 것을 선호한다.",
14
  "나는 직관보다는 자료에 의존하는 편이다.",
 
 
15
  "나는 감정보다는 논리적으로 판단하려 한다.",
16
  "나는 갈등 상황에서 공정함을 중시한다.",
17
  "나는 결정을 내릴 때 사람들의 감정보다는 사실에 집중한다.",
18
  "나는 문제 해결에 있어 논리적 접근을 선호한다.",
19
  "나는 비판을 받더라도 감정적으로 반응하지 않으려 한다.",
 
 
20
  "나는 계획에 따라 일하는 것을 선호한다.",
21
  "나는 마감 기한 전에 일을 마무리하려 노력한다.",
22
  "나는 일의 세부 계획을 미리 세워놓는다.",
@@ -24,71 +31,54 @@ questions = [
24
  "나는 변화보다는 안정된 상태를 선호한다."
25
  ]
26
 
27
- # MBTI 성격 유형 설명 데이터
28
- mbti_details = {
29
- "ESTJ": {
30
- "성격 성향": "실용적이고 조직적, 리더십 강함",
31
- "기질 설명": "현실적이며 체계적인 접근을 좋아함",
32
- "추천 직업": ["경영자", "프로젝트 매니저", "군인"],
33
- "좋은 궁합": ["ISFJ", "ISTJ"],
34
- "나쁜 궁합": ["INFP", "ENFP"],
35
- "궁합 이유": {
36
- "좋은": "비슷한 현실주의 성향과 체계적인 사고를 공유하기 때문에 어울림.",
37
- "나쁜": "감정적으로 충돌할 가능성이 높고, 자유로운 성향이 충돌할 있음."
38
- }
39
- },
40
- "ENTJ": {
41
- "성격 성향": "전략적이고 결단력 있음",
42
- "기질 설명": "리더십을 중시하고 목표 지향적임",
43
- "추천 직업": ["CEO", "변호사", "컨설턴트"],
44
- "좋은 궁합": ["INTP", "ENFP"],
45
- "나쁜 궁합": ["ISFP", "INFP"],
46
- "궁합 이유": {
47
- "좋은": "자유로운 사고를 존중하며, 문제 해결 능력이 잘 어우러짐.",
48
- "나쁜": "감정적으로 충돌하고, 세부 사항을 무시하는 경향이 문제를 일으킬 수 있음."
49
- }
50
- },
51
- # 더 많은 유형에 대해 정보를 추가하세요.
52
- }
53
-
54
- # MBTI 결과에 따른 설명 제공 함수
55
- def get_mbti_details(mbti_type):
56
- details = mbti_details.get(mbti_type, None)
57
- if details:
58
- description = f"성격 성향: {details['성격 성향']}\n"
59
- description += f"기질 설명: {details['기질 설명']}\n"
60
- description += f"추천 직업: {', '.join(details['추천 직업'])}\n"
61
- description += f"좋은 궁합: {', '.join(details['좋은 궁합'])}\n"
62
- description += f"나쁜 궁합: {', '.join(details['나쁜 궁합'])}\n"
63
- description += f"좋은 궁합 이유: {details['궁합 이유']['좋은']}\n"
64
- description += f"나쁜 궁합 이유: {details['궁합 이유']['나쁜']}\n"
65
- return description
66
- return "알 수 없는 MBTI 유형입니다."
67
 
68
  # 결과 계산 함수
69
  def calculate_mbti(responses):
 
70
  e_score = sum([responses[i] for i in range(5)]) # Extraversion/Introversion 관련 점수
71
  s_score = sum([responses[i + 5] for i in range(5)]) # Sensing/Intuition 관련 점수
72
  t_score = sum([responses[i + 10] for i in range(5)]) # Thinking/Feeling 관련 점수
73
  j_score = sum([responses[i + 15] for i in range(5)]) # Judging/Perceiving 관련 점수
74
-
 
75
  mbti_type = ""
76
  mbti_type += "E" if e_score > 15 else "I"
77
  mbti_type += "S" if s_score > 15 else "N"
78
  mbti_type += "T" if t_score > 15 else "F"
79
  mbti_type += "J" if j_score > 15 else "P"
80
-
81
- # 유형이 얼마나 맞는지 계산 (%)
82
- total_score = e_score + s_score + t_score + j_score
83
- percentage = round(total_score / 100 * 100, 2)
84
-
85
- description = get_mbti_details(mbti_type)
86
 
87
- return f"당신의 MBTI 유형은 {mbti_type}입니다. 이 유형이 맞을 확률은 {percentage}%입니다.\n\n{description}"
 
 
 
88
 
89
  # Gradio 인터페이스 생성
90
  def create_interface():
 
91
  inputs = [gr.Radio(choices=[1, 2, 3, 4, 5], label=questions[i]) for i in range(len(questions))]
 
 
92
  interface = gr.Interface(fn=calculate_mbti, inputs=inputs, outputs="text", title="MBTI 분석기", description="20개의 질문에 답하고 당신의 MBTI 유형과 그 설명을 확인하세요!")
93
  return interface
94
 
 
2
 
3
  # 질문 설정 (총 20개로 축소)
4
  questions = [
5
+ # 외향형(Extraversion) vs 내향형(Introversion)
6
  "나는 다른 사람들과 함께 있을 때 에너지를 얻는다.",
7
  "나는 새로운 사람들과 쉽게 친해지는 편이다.",
8
  "나는 대규모 모임을 즐긴다.",
9
  "나는 혼자 보내는 시간이 편하다.",
10
  "나는 친구들과 대화하는 시간이 즐겁다.",
11
+
12
+ # 감각형(Sensing) vs 직관형(Intuition)
13
  "나는 현실적이고 구체적인 정보를 선호한다.",
14
  "나는 과거의 경험을 바탕으로 결정을 내린다.",
15
  "나는 큰 그림보다는 세부사항에 집중한다.",
16
  "나는 새로운 아이디어보다는 실질적인 것을 선호한다.",
17
  "나는 직관보다는 자료에 의존하는 편이다.",
18
+
19
+ # 사고형(Thinking) vs 감정형(Feeling)
20
  "나는 감정보다는 논리적으로 판단하려 한다.",
21
  "나는 갈등 상황에서 공정함을 중시한다.",
22
  "나는 결정을 내릴 때 사람들의 감정보다는 사실에 집중한다.",
23
  "나는 문제 해결에 있어 논리적 접근을 선호한다.",
24
  "나는 비판을 받더라도 감정적으로 반응하지 않으려 한다.",
25
+
26
+ # 판단형(Judging) vs 인식형(Perceiving)
27
  "나는 계획에 따라 일하는 것을 선호한다.",
28
  "나는 마감 기한 전에 일을 마무리하려 노력한다.",
29
  "나는 일의 세부 계획을 미리 세워놓는다.",
 
31
  "나는 변화보다는 안정된 상태를 선호한다."
32
  ]
33
 
34
+ # 결과에 따른 성격 설명
35
+ def get_mbti_description(mbti_type):
36
+ descriptions = {
37
+ "ESTJ": "ESTJ는 실용적이고 현실적이며, 조직적입니다. 리더십 역할을 자주 맡으며 체계적인 계획을 선호합니다.",
38
+ "ESFJ": "ESFJ는 사회적이고 따뜻한 사람입니다. 다른 사람을 돕고 조화를 유지하는 것을 중요하게 여깁니다.",
39
+ "ISTJ": "ISTJ는 신뢰할 있고 책임감이 강하며, 현실적입니다. 규칙과 절차를 따르는 것을 선호합니다.",
40
+ "ISFJ": "ISFJ 조용하고 헌신적인 사람입니다. 타인의 필요를 잘 이해하고 배려합니다.",
41
+ "ENTJ": "ENTJ는 전략적이고 결단력이 있으며, 리더십을 발휘합니다. 효율성과 성과를 중요하게 생각합니다.",
42
+ "ENTP": "ENTP는 창의적이고 독창적이며, 새로운 아이디어를 탐구하는 것을 좋아합니다. 토론을 즐기고 문제를 해결하는 데 능합니다.",
43
+ "INTJ": "INTJ는 분석적이고 독립적이며, 장기적인 계획을 세우는 것을 선호합니다. 목표 지향적이고 효율적입니다.",
44
+ "INTP": "INTP는 이론적이고 분석적인 사고를 합니다. 논리적이고 문제 해결에 능하며, 독립적인 경향이 있습니다.",
45
+ "ENFJ": "ENFJ는 따뜻하��� 외향적이며, 타인의 감정을 잘 이해합니다. 타인을 돕고 이끄는 데 재능이 있습니다.",
46
+ "ENFP": "ENFP는 열정적이고 창의적이며, 타인과 쉽게 공감하는 성향이 있습니다. 자유롭고 독립적인 삶을 추구합니다.",
47
+ "INFJ": "INFJ는 통찰력 있고 깊은 사고를 합니다. 타인의 필요를 잘 이해하고, 그들에게 영감을 주는 것을 좋아합니다.",
48
+ "INFP": "INFP는 이상적이고 감정이 깊으며, 가치와 신념을 중시합니다. 창의적이고 내면이 풍부합니다.",
49
+ "ESTP": "ESTP는 행동적이고 실용적입니다. 문제를 해결하고 새로운 도전을 즐깁니다.",
50
+ "ESFP": "ESFP는 사교적이고 외향적입니다. 다른 사람들과 즐겁게 시간을 보내며 순간을 즐깁니다.",
51
+ "ISTP": "ISTP는 실용적이고 분석적입니다. 기술적인 문제 해결에 능하며 독립적인 성향을 가지고 있습니다.",
52
+ "ISFP": "ISFP 조용하고 감성적입니다. 창의적이고 예술적인 면이 있으며, 사람들과 따뜻하게 교류합니다."
53
+ }
54
+ return descriptions.get(mbti_type, " 없는 MBTI 유형입니다.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
  # 결과 계산 함수
57
  def calculate_mbti(responses):
58
+ # 각 성향 점수 계산
59
  e_score = sum([responses[i] for i in range(5)]) # Extraversion/Introversion 관련 점수
60
  s_score = sum([responses[i + 5] for i in range(5)]) # Sensing/Intuition 관련 점수
61
  t_score = sum([responses[i + 10] for i in range(5)]) # Thinking/Feeling 관련 점수
62
  j_score = sum([responses[i + 15] for i in range(5)]) # Judging/Perceiving 관련 점수
63
+
64
+ # MBTI 유형 결정
65
  mbti_type = ""
66
  mbti_type += "E" if e_score > 15 else "I"
67
  mbti_type += "S" if s_score > 15 else "N"
68
  mbti_type += "T" if t_score > 15 else "F"
69
  mbti_type += "J" if j_score > 15 else "P"
 
 
 
 
 
 
70
 
71
+ # MBTI 설명 제공
72
+ description = get_mbti_description(mbti_type)
73
+
74
+ return f"당신의 MBTI 유형은 {mbti_type}입니다.\n\n{description}"
75
 
76
  # Gradio 인터페이스 생성
77
  def create_interface():
78
+ # 라디오 버튼을 20개 생성하고, 각 질문에 대한 선택값을 받는다
79
  inputs = [gr.Radio(choices=[1, 2, 3, 4, 5], label=questions[i]) for i in range(len(questions))]
80
+
81
+ # Gradio 인터페이스 설정
82
  interface = gr.Interface(fn=calculate_mbti, inputs=inputs, outputs="text", title="MBTI 분석기", description="20개의 질문에 답하고 당신의 MBTI 유형과 그 설명을 확인하세요!")
83
  return interface
84