Spaces:
Sleeping
Sleeping
import gradio as gr | |
# 질문 설정 (총 20개로 축소) | |
questions = [ | |
# 외향형(Extraversion) vs 내향형(Introversion) | |
"나는 다른 사람들과 함께 있을 때 에너지를 얻는다.", | |
"나는 새로운 사람들과 쉽게 친해지는 편이다.", | |
"나는 대규모 모임을 즐긴다.", | |
"나는 혼자 보내는 시간이 편하다.", | |
"나는 친구들과 대화하는 시간이 즐겁다.", | |
# 감각형(Sensing) vs 직관형(Intuition) | |
"나는 현실적이고 구체적인 정보를 선호한다.", | |
"나는 과거의 경험을 바탕으로 결정을 내린다.", | |
"나는 큰 그림보다는 세부사항에 집중한다.", | |
"나는 새로운 아이디어보다는 실질적인 것을 선호한다.", | |
"나는 직관보다는 자료에 의존하는 편이다.", | |
# 사고형(Thinking) vs 감정형(Feeling) | |
"나는 감정보다는 논리적으로 판단하려 한다.", | |
"나는 갈등 상황에서 공정함을 중시한다.", | |
"나는 결정을 내릴 때 사람들의 감정보다는 사실에 집중한다.", | |
"나는 문제 해결에 있어 논리적 접근을 선호한다.", | |
"나는 비판을 받더라도 감정적으로 반응하지 않으려 한다.", | |
# 판단형(Judging) vs 인식형(Perceiving) | |
"나는 계획에 따라 일하는 것을 선호한다.", | |
"나는 마감 기한 전에 일을 마무리하려 노력한다.", | |
"나는 일의 세부 계획을 미리 세워놓는다.", | |
"나는 예측 가능한 일정을 선호한다.", | |
"나는 변화보다는 안정된 상태를 선호한다." | |
] | |
# 결과에 따른 성격 설명 | |
def get_mbti_description(mbti_type): | |
descriptions = { | |
"ESTJ": "ESTJ는 실용적이고 현실적이며, 조직적입니다. 리더십 역할을 자주 맡으며 체계적인 계획을 선호합니다.", | |
"ESFJ": "ESFJ는 사회적이고 따뜻한 사람입니다. 다른 사람을 돕고 조화를 유지하는 것을 중요하게 여깁니다.", | |
"ISTJ": "ISTJ는 신뢰할 수 있고 책임감이 강하며, 현실적입니다. 규칙과 절차를 따르는 것을 선호합니다.", | |
"ISFJ": "ISFJ는 조용하고 헌신적인 사람입니다. 타인의 필요를 잘 이해하고 배려합니다.", | |
"ENTJ": "ENTJ는 전략적이고 결단력이 있으며, 리더십을 발휘합니다. 효율성과 성과를 중요하게 생각합니다.", | |
"ENTP": "ENTP는 창의적이고 독창적이며, 새로운 아이디어를 탐구하는 것을 좋아합니다. 토론을 즐기고 문제를 해결하는 데 능합니다.", | |
"INTJ": "INTJ는 분석적이고 독립적이며, 장기적인 계획을 세우는 것을 선호합니다. 목표 지향적이고 효율적입니다.", | |
"INTP": "INTP는 이론적이고 분석적인 사고를 합니다. 논리적이고 문제 해결에 능하며, 독립적인 경향이 있습니다.", | |
"ENFJ": "ENFJ는 따뜻하고 외향적이며, 타인의 감정을 잘 이해합니다. 타인을 돕고 이끄는 데 재능이 있습니다.", | |
"ENFP": "ENFP는 열정적이고 창의적이며, 타인과 쉽게 공감하는 성향이 있습니다. 자유롭고 독립적인 삶을 추구합니다.", | |
"INFJ": "INFJ는 통찰력 있고 깊은 사고를 합니다. 타인의 필요를 잘 이해하고, 그들에게 영감을 주는 것을 좋아합니다.", | |
"INFP": "INFP는 이상적이고 감정이 깊으며, 가치와 신념을 중시합니다. 창의적이고 내면이 풍부합니다.", | |
"ESTP": "ESTP는 행동적이고 실용적입니다. 문제를 해결하고 새로운 도전을 즐깁니다.", | |
"ESFP": "ESFP는 사교적이고 외향적입니다. 다른 사람들과 즐겁게 시간을 보내며 순간을 즐깁니다.", | |
"ISTP": "ISTP는 실용적이고 분석적입니다. 기술적인 문제 해결에 능하며 독립적인 성향을 가지고 있습니다.", | |
"ISFP": "ISFP는 조용하고 감성적입니다. 창의적이고 예술적인 면이 있으며, 사람들과 따뜻하게 교류합니다." | |
} | |
return descriptions.get(mbti_type, "알 수 없는 MBTI 유형입니다.") | |
# 결과 계산 함수 | |
def calculate_mbti(responses): | |
e_score = sum([responses[i] for i in range(5)]) # Extraversion/Introversion 관련 점수 | |
s_score = sum([responses[i + 5] for i in range(5)]) # Sensing/Intuition 관련 점수 | |
t_score = sum([responses[i + 10] for i in range(5)]) # Thinking/Feeling 관련 점수 | |
j_score = sum([responses[i + 15] for i in range(5)]) # Judging/Perceiving 관련 점수 | |
# 각 성향에 따른 MBTI 유형 결정 | |
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" | |
# MBTI 유형에 따른 설명 추가 | |
description = get_mbti_description(mbti_type) | |
return f"당신의 MBTI 유형은 {mbti_type}입니다.\n\n{description}" | |
# Gradio 인터페이스 생성 | |
def create_interface(): | |
inputs = [gr.Radio(choices=["매우 아니다", "아니다", "보통이다", "그렇다", "매우 그렇다"], label=questions[i]) for i in range(len(questions))] | |
# Gradio에서는 responses를 리스트로 받아 처리할 수 있도록 설정 | |
interface = gr.Interface(fn=calculate_mbti, inputs=inputs, outputs="text", title="MBTI 분석기", description="20개의 질문에 답하고 당신의 MBTI 유형과 그 설명을 확인하세요!") | |
return interface | |
# 인터페이스 실행 | |
interface = create_interface() | |
interface.launch() | |