File size: 7,335 Bytes
69d0bc7
 
 
 
 
 
e140027
 
6d5e2f0
e140027
6d5e2f0
5750935
 
6d5e2f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e140027
 
4a0bd58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6d5e2f0
5750935
b11ddcd
8ce5137
4a0bd58
 
 
 
 
 
 
8ce5137
4a0bd58
 
 
 
 
 
 
77c17c9
6d5e2f0
 
 
 
4a0bd58
 
 
 
 
 
6d5e2f0
4a0bd58
7450f4e
5750935
77c17c9
4a0bd58
 
 
8ce5137
 
6d5e2f0
77c17c9
e140027
77c17c9
 
 
69d0bc7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
이코드를 적용하라
한국어로 답하라

아래 코드를 (OOOOO 자세한 설명)개선하려고한다. 코드를 생성하라
요청한 사항외 절대 다른 코드는 수정하지마라

import gradio as gr

# 질문 설정 (총 20개로 축소)
questions = [
    "나는 다른 사람들과 함께 있을 때 에너지를 얻는다.",
    "나는 새로운 사람들과 쉽게 친해지는 편이다.",
    "나는 대규모 모임을 즐긴다.",
    "나는 혼자 보내는 시간이 편하다.",
    "나는 친구들과 대화하는 시간이 즐겁다.",
    "나는 현실적이고 구체적인 정보를 선호한다.",
    "나는 과거의 경험을 바탕으로 결정을 내린다.",
    "나는 큰 그림보다는 세부사항에 집중한다.",
    "나는 새로운 아이디어보다는 실질적인 것을 선호한다.",
    "나는 직관보다는 자료에 의존하는 편이다.",
    "나는 감정보다는 논리적으로 판단하려 한다.",
    "나는 갈등 상황에서 공정함을 중시한다.",
    "나는 결정을 내릴 때 사람들의 감정보다는 사실에 집중한다.",
    "나는 문제 해결에 있어 논리적 접근을 선호한다.",
    "나는 비판을 받더라도 감정적으로 반응하지 않으려 한다.",
    "나는 계획에 따라 일하는 것을 선호한다.",
    "나는 마감 기한 전에 일을 마무리하려 노력한다.",
    "나는 일의 세부 계획을 미리 세워놓는다.",
    "나는 예측 가능한 일정을 선호한다.",
    "나는 변화보다는 안정된 상태를 선호한다."
]

# MBTI 성격 유형 설명 데이터
mbti_details = {
    "ESTJ": {
        "성격 성향": "실용적이고 조직적, 리더십 강함",
        "기질 설명": "현실적이며 체계적인 접근을 좋아함",
        "추천 직업": ["경영자", "프로젝트 매니저", "군인"],
        "좋은 궁합": ["ISFJ", "ISTJ"],
        "나쁜 궁합": ["INFP", "ENFP"],
        "궁합 이유": {
            "좋은": "비슷한 현실주의 성향과 체계적인 사고를 공유하기 때문에 잘 어울림.",
            "나쁜": "감정적으로 충돌할 가능성이 높고, 자유로운 성향이 충돌할 수 있음."
        }
    },
    "ENTJ": {
        "성격 성향": "전략적이고 결단력 있음",
        "기질 설명": "리더십을 중시하고 목표 지향적임",
        "추천 직업": ["CEO", "변호사", "컨설턴트"],
        "좋은 궁합": ["INTP", "ENFP"],
        "나쁜 궁합": ["ISFP", "INFP"],
        "궁합 이유": {
            "좋은": "자유로운 사고를 존중하며, 문제 해결 능력이 잘 어우러짐.",
            "나쁜": "감정적으로 충돌하고, 세부 사항을 무시하는 경향이 문제를 일으킬 수 있음."
        }
    },
    # 다른 MBTI 유형 설명 추가
}

# MBTI 결과에 따른 설명 제공 함수
def get_mbti_details(mbti_type):
    details = mbti_details.get(mbti_type, None)
    if details:
        description = f"성격 성향: {details['성격 성향']}\n"
        description += f"기질 설명: {details['기질 설명']}\n"
        description += f"추천 직업: {', '.join(details['추천 직업'])}\n"
        description += f"좋은 궁합: {', '.join(details['좋은 궁합'])}\n"
        description += f"나쁜 궁합: {', '.join(details['나쁜 궁합'])}\n"
        description += f"좋은 궁합 이유: {details['궁합 이유']['좋은']}\n"
        description += f"나쁜 궁합 이유: {details['궁합 이유']['나쁜']}\n"
        return description
    return "알 수 없는 MBTI 유형입니다."

# 결과 계산 함수
def calculate_mbti(responses):
    # 각 성향 점수 계산
    score_mapping = {
        "매우 아니다": 1,
        "아니다": 2,
        "보통이다": 3,
        "그렇다": 4,
        "매우 그렇다": 5
    }
    
    scores = [score_mapping[response] for response in responses]
    
    e_score = sum([scores[i] for i in range(5)])  # Extraversion/Introversion 관련 점수
    s_score = sum([scores[i + 5] for i in range(5)])  # Sensing/Intuition 관련 점수
    t_score = sum([scores[i + 10] for i in range(5)])  # Thinking/Feeling 관련 점수
    j_score = sum([scores[i + 15] for i in range(5)])  # Judging/Perceiving 관련 점수

    mbti_type = ""
    mbti_type += "E" if e_score > 15 else "I"
    mbti_type += "S" if s_score > 15 else "N"
    mbti_type += "T" if t_score > 15 else "F"
    mbti_type += "J" if j_score > 15 else "P"

    # 유형이 얼마나 맞는지 계산 (%)
    total_score = e_score + s_score + t_score + j_score
    percentage = round(total_score / 100 * 100, 2)

    description = get_mbti_details(mbti_type)
    
    return f"당신의 MBTI 유형은 {mbti_type}입니다. 이 유형이 맞을 확률은 {percentage}%입니다.\n\n{description}"

# Gradio 인터페이스 생성
def create_interface():
    # 라디오 버튼을 "매우 아니다" ~ "매우 그렇다" 값으로 설정
    choices = ["매우 아니다", "아니다", "보통이다", "그렇다", "매우 그렇다"]
    inputs = [gr.Radio(choices=choices, label=questions[i]) for i in range(len(questions))]

    # Gradio 인터페이스 설정
    interface = gr.Interface(fn=calculate_mbti, inputs=inputs, outputs="text", title="MBTI 분석기", description="20개의 질문에 답하고 당신의 MBTI 유형과 그 설명을 확인하세요!")
    return interface

# 인터페이스 실행
interface = create_interface()
interface.launch()




===== Application Startup at 2024-08-22 10:52:55 =====

/usr/local/lib/python3.10/site-packages/gradio/utils.py:1002: UserWarning: Expected 1 arguments for function <function calculate_mbti at 0x7f1d47a79510>, received 20.
  warnings.warn(
/usr/local/lib/python3.10/site-packages/gradio/utils.py:1010: UserWarning: Expected maximum 1 arguments for function <function calculate_mbti at 0x7f1d47a79510>, received 20.
  warnings.warn(
Running on local URL:  http://0.0.0.0:7860

To create a public link, set `share=True` in `launch()`.
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/gradio/queueing.py", line 536, in process_events
    response = await route_utils.call_process_api(
  File "/usr/local/lib/python3.10/site-packages/gradio/route_utils.py", line 288, in call_process_api
    output = await app.get_blocks().process_api(
  File "/usr/local/lib/python3.10/site-packages/gradio/blocks.py", line 1931, in process_api
    result = await self.call_function(
  File "/usr/local/lib/python3.10/site-packages/gradio/blocks.py", line 1516, in call_function
    prediction = await anyio.to_thread.run_sync(  # type: ignore
  File "/usr/local/lib/python3.10/site-packages/anyio/to_thread.py", line 56, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
  File "/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 2177, in run_sync_in_worker_thread
    return await future
  File "/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 859, in run
    result = context.run(func, *args)
  File "/usr/local/lib/python3.10/site-packages/gradio/utils.py", line 826, in wrapper
    response = f(*args, **kwargs)
TypeError: calculate_mbti() takes 1 positional argument but 20 were given