File size: 5,634 Bytes
bd7ce79 5751319 bd7ce79 d348e0c bd7ce79 d348e0c 5751319 d348e0c bd7ce79 022aa34 bd7ce79 d348e0c bd7ce79 d348e0c bd7ce79 d348e0c 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 96 97 98 99 100 101 102 103 104 105 106 107 |
import gradio as gr
import plotly.express as px
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):
# μ μλ₯Ό 5λ¨κ³λ‘ κ³μ°ν©λλ€. λ§€μ° κ·Έλ λ€: 2, κ·Έλ λ€: 1, 보ν΅μ΄λ€: 0, μλλ€: -1, λ§€μ° μλλ€: -2
scale = {"λ§€μ° κ·Έλ λ€": 2, "κ·Έλ λ€": 1, "보ν΅μ΄λ€": 0, "μλλ€": -1, "λ§€μ° μλλ€": -2}
score = scale[answer]
if score > 0:
self.scores[category[0]] += score
elif score < 0:
self.scores[category[1]] -= score
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'
return result, percentages
def plot_result(self, percentages):
labels = list(percentages.keys())
sizes = list(percentages.values())
fig = px.bar(x=labels, y=sizes, labels={'x': 'Trait', 'y': 'Percentage (%)'},
title="MBTI Result Distribution")
fig.update_layout(yaxis_range=[0, 100])
return fig
def mbti_interface(*answers):
analyzer = MBTIAnalyzer()
result, percentages = analyzer.analyze(answers)
fig = analyzer.plot_result(percentages)
return result, fig
# Gradio μΈν°νμ΄μ€ μ€μ
questions = []
for key in ['EI', 'SN', 'TF', 'JP']:
for q in MBTIAnalyzer().questions[key]:
questions.append(gr.Radio(["λ§€μ° κ·Έλ λ€", "κ·Έλ λ€", "보ν΅μ΄λ€", "μλλ€", "λ§€μ° μλλ€"], label=q))
iface = gr.Interface(
fn=mbti_interface,
inputs=questions,
outputs=[gr.Textbox(label="MBTI μ ν κ²°κ³Ό"), gr.Plot(label="κ²°κ³Ό μ°¨νΈ")],
title="MBTI λΆμκΈ°",
description="20κ° μ΄μμ μ§λ¬Έμ ν΅ν΄ λΉμ μ MBTI μ νμ λΆμν©λλ€."
)
if __name__ == "__main__":
iface.launch()
|