Spaces:
Runtime error
Runtime error
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# app.py
|
2 |
+
|
3 |
+
import gradio as gr
|
4 |
+
import json
|
5 |
+
|
6 |
+
# TCI 유형 데이터
|
7 |
+
TCI_TYPES = {
|
8 |
+
"Type1": {
|
9 |
+
"name": "예시 유형1",
|
10 |
+
"description": "이 유형은 ...",
|
11 |
+
"career": ["직업1", "직업2", "직업3"],
|
12 |
+
"compatibility": {
|
13 |
+
"good": {"Type2": "이유..."},
|
14 |
+
"bad": {"Type3": "이유..."}
|
15 |
+
}
|
16 |
+
},
|
17 |
+
# 다른 6가지 유형도 동일한 형식으로 추가
|
18 |
+
# ...
|
19 |
+
}
|
20 |
+
|
21 |
+
# 질문 리스트
|
22 |
+
QUESTIONS = [
|
23 |
+
"질문 1 내용...",
|
24 |
+
"질문 2 내용...",
|
25 |
+
"질문 3 내용...",
|
26 |
+
# 최소 20개 이상의 질문 추가
|
27 |
+
# ...
|
28 |
+
]
|
29 |
+
|
30 |
+
# 선택지
|
31 |
+
OPTIONS = ["매우 그렇다", "그렇다", "보통이다", "아니다", "매우 아니다"]
|
32 |
+
|
33 |
+
def calculate_tci(responses):
|
34 |
+
# 예시 점수 계산 로직
|
35 |
+
# 실제 TCI 점수 계산 방식에 맞게 수정 필요
|
36 |
+
scores = {type_name: 0 for type_name in TCI_TYPES.keys()}
|
37 |
+
for i, response in enumerate(responses):
|
38 |
+
# 각 질문을 특정 유형에 매핑하는 로직 필요
|
39 |
+
# 예를 들어, 질문 i가 Type1에 해당하면 scores["Type1"] += response 점수
|
40 |
+
pass
|
41 |
+
# 퍼센트 계산
|
42 |
+
total = sum(scores.values())
|
43 |
+
percentages = {k: (v / total * 100) if total > 0 else 0 for k, v in scores.items()}
|
44 |
+
# 최고 점수 유형 선택
|
45 |
+
selected_type = max(percentages, key=percentages.get)
|
46 |
+
return selected_type, percentages[selected_type]
|
47 |
+
|
48 |
+
def get_results(responses):
|
49 |
+
selected_type, percentage = calculate_tci(responses)
|
50 |
+
type_info = TCI_TYPES[selected_type]
|
51 |
+
|
52 |
+
# 형식에 맞는 결과 생성
|
53 |
+
result = {
|
54 |
+
"유형": type_info["name"],
|
55 |
+
"퍼센트": f"{percentage:.2f}%",
|
56 |
+
"성격 설명": type_info["description"],
|
57 |
+
"추천 직업": ", ".join(type_info["career"]),
|
58 |
+
"좋은 궁합": ", ".join([f"{k}: {v}" for k, v in type_info["compatibility"]["good"].items()]),
|
59 |
+
"나쁜 궁합": ", ".join([f"{k}: {v}" for k, v in type_info["compatibility"]["bad"].items()])
|
60 |
+
}
|
61 |
+
return result
|
62 |
+
|
63 |
+
def main():
|
64 |
+
with gr.Blocks() as demo:
|
65 |
+
gr.Markdown("# TCI 기질 분석기")
|
66 |
+
with gr.Form():
|
67 |
+
responses = []
|
68 |
+
for question in QUESTIONS:
|
69 |
+
response = gr.Radio(label=question, choices=OPTIONS, type="index")
|
70 |
+
responses.append(response)
|
71 |
+
submit = gr.Button("결과 보기")
|
72 |
+
output = gr.JSON()
|
73 |
+
|
74 |
+
submit.click(fn=get_results, inputs=responses, outputs=output)
|
75 |
+
|
76 |
+
demo.launch()
|
77 |
+
|
78 |
+
if __name__ == "__main__":
|
79 |
+
main()
|