Spaces:
Sleeping
Sleeping
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() | |