File size: 4,928 Bytes
bd7ce79 |
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 |
import gradio as gr
class MBTIAnalyzer:
def __init__(self):
self.questions = {
'EI': [
"μ¬λλ€κ³Όμ λͺ¨μμ΄ λλ ν λΉμ μ μλμ§κ° μΆ©μ λλμ, μλλ©΄ μλͺ¨λλμ?",
"ν΄μ μκ°μ νΌμ 보λ΄λ κ²μ μ’μνλμ, μλλ©΄ μΉκ΅¬λ€κ³Ό ν¨κ» 보λ΄λ κ²μ λ μ’μνλμ?",
"λͺ¨λ₯΄λ μ¬λλ€κ³Ό μ½κ² μΉν΄μ§λμ, μλλ©΄ μκ°μ΄ 걸리λμ?",
"λ€λ₯Έ μ¬λκ³Ό ν¨κ» μκ°μ 보λ΄λ κ²μ μ¦κΈ°λμ, μλλ©΄ νΌμ μλ μκ°μ΄ λ μ’λμ?",
"μ£Όλ§μλ μ§μμ μ¬λ κ²μ΄ μ’λμ, μλλ©΄ λ°μμ μ¬λλ€κ³Ό μ΄μΈλ¦¬λ κ²μ΄ μ’λμ?"
],
'SN': [
"νμ¬μ μ¬μ€μ μ§μ€νλ νΈμΈκ°μ, μλλ©΄ λ―Έλμ κ°λ₯μ±μ λ κ΄μ¬μ΄ μλμ?",
"μ€μ κ²½νμ ν΅ν΄ λ°°μ°λ κ²μ μ νΈνλμ, μλλ©΄ μ΄λ‘ μ κ°λ
μ λ°°μ°λ κ²μ μ νΈνλμ?",
"μΈλΆ μ¬νμ μ κ²½μ λ§μ΄ μ°μλμ, μλλ©΄ ν° κ·Έλ¦Όμ 보λ κ²μ μ’μνμλμ?",
"μ§κ΄μ μΌλ‘ κ²°μ μ μ λ΄λ¦¬μλμ, μλλ©΄ ꡬ체μ μΈ μ 보λ₯Ό λ°νμΌλ‘ κ²°μ μ λ΄λ¦¬μλμ?",
"λΉμ μ νμ€μ μΈ μ¬λμΈκ°μ, μλλ©΄ μ΄μμ μΈ μ¬λμΈκ°μ?"
],
'TF': [
"μμ¬κ²°μ μ λ
Όλ¦¬μ λΆμμ λ°νμΌλ‘ κ²°μ μ λ΄λ¦¬λμ, μλλ©΄ μ¬λλ€μ κ°μ μ κ³ λ €νμ¬ κ²°μ μ λ΄λ¦¬λμ?",
"κ°λ± μν©μμ λ¬Έμ λ₯Ό λ
Όλ¦¬μ μΌλ‘ ν΄κ²°νλ κ²μ΄ μ€μνλ€κ³ μκ°νλμ, μλλ©΄ μλ‘μ κ°μ μ μ΄ν΄νκ³ ν΄κ²°νλ κ²μ΄ μ€μνλ€κ³ μκ°νλμ?",
"μ¬λλ€κ³Όμ κ΄κ³μμ 곡μ ν¨μ΄ μ€μνκ°μ, μλλ©΄ μ‘°νκ° λ μ€μνκ°μ?",
"λΉνμ λ°μΌλ©΄ κΈ°λΆμ΄ λμμ κ°μ, μλλ©΄ κ°μ μ κΈ°νλ‘ μκ°νμλμ?",
"κ²°μ μ λ΄λ¦΄ λ κ°μ λ³΄λ€ λ
Όλ¦¬κ° λ μ€μνλ€κ³ μκ°νμλμ?"
],
'JP': [
"κ³νμ μΈ μΆμ μ νΈνμλμ, μλλ©΄ μ¦ν₯μ μΌλ‘ μ¬λ κ²μ μ νΈνμλμ?",
"λ§κ° μκ°μ΄ λ€κ°μ¬ λ μΌμ 미리 λλ΄κ³ μ¬μ λ‘κ² μκ°μ 보λ΄λμ, μλλ©΄ λ§νμ λͺ°μμ νμλμ?",
"κ³νμ΄ λ³κ²½λλ©΄ μ€νΈλ μ€λ₯Ό λ°λμ, μλλ©΄ μ μ°νκ² λμ²νμλμ?",
"μκ°νλ μΌμ μ μ² μ ν μ§ν€μλμ, μλλ©΄ κ·Έλκ·Έλ μν©μ λ§κ² νλνμλμ?",
"μΌμ μ΄λ κ³νμ΄ μλ κ²μ΄ λ λ§μμ΄ νΈνκ°μ, μλλ©΄ μμ λ‘μ΄ κ²μ΄ λ μ’λμ?"
]
}
self.scores = {'E': 0, 'I': 0, 'S': 0, 'N': 0, 'T': 0, 'F': 0, 'J': 0, 'P': 0}
def ask_question(self, category, answer):
if answer == '1':
self.scores[category[0]] += 1
elif answer == '2':
self.scores[category[1]] += 1
def analyze(self, answers):
idx = 0
for category, questions in self.questions.items():
for _ in questions:
self.ask_question(category, answers[idx])
idx += 1
return self.get_result()
def calculate_percentage(self):
percentages = {}
for category in ['E', 'I', 'S', 'N', 'T', 'F', 'J', 'P']:
opposite = category[0] if category[0] in ['I', 'N', 'F', 'P'] else category[1]
total = self.scores[category] + self.scores[opposite]
if total == 0:
percentages[category] = 50
else:
percentages[category] = int((self.scores[category] / total) * 100)
return percentages
def get_result(self):
percentages = self.calculate_percentage()
result = ''
result += 'E' if percentages['E'] >= 50 else 'I'
result += 'S' if percentages['S'] >= 50 else 'N'
result += 'T' if percentages['T'] >= 50 else 'F'
result += 'J' if percentages['J'] >= 50 else 'P'
output = f"MBTI μ ν: {result}\n\nμΈλΆ μ§μ:\n"
for trait, percentage in percentages.items():
output += f"{trait}: {percentage}%\n"
return output
def mbti_interface(answers):
analyzer = MBTIAnalyzer()
return analyzer.analyze(answers)
# Gradio μΈν°νμ΄μ€ μ€μ
questions = []
for key in ['EI', 'SN', 'TF', 'JP']:
for q in MBTIAnalyzer().questions[key]:
questions.append(gr.inputs.Radio(["1", "2"], label=q))
iface = gr.Interface(
fn=mbti_interface,
inputs=questions,
outputs="text",
title="MBTI λΆμκΈ°",
description="20κ° μ΄μμ μ§λ¬Έμ ν΅ν΄ λΉμ μ MBTI μ νμ λΆμν©λλ€."
)
if __name__ == "__main__":
iface.launch()
|