Lilju commited on
Commit
59b44b1
ยท
verified ยท
1 Parent(s): c74a003

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +252 -0
app.py CHANGED
@@ -0,0 +1,252 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ # Colab ์ „์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ ์ตœ์†Œ ์ •๋ฆฌํŒ (์›๋ณธ ๋กœ์ง ์œ ์ง€)
3
+ import os
4
+ import ast
5
+ import pandas as pd
6
+ import numpy as np
7
+ from openai import OpenAI
8
+ import torch
9
+ import torch.nn.functional as F
10
+ from sentence_transformers import SentenceTransformer, util
11
+ import gradio as gr
12
+
13
+ DATA_PATH = "data.csv"
14
+
15
+ # MBTI / ์˜คํ–‰ ์‚ฌ์ „ (์›๋ณธ ๊ทธ๋Œ€๋กœ)
16
+ mbti_dict = {
17
+ "ENFJ": "ENFJ๋Š” ์‚ฌ๋ ค ๊นŠ๊ณ  ์ด์ƒ์ฃผ์˜์ ์ธ ์„ฑํ–ฅ์œผ๋กœ ๊ธ์ •์ ์ธ ์˜ํ–ฅ๋ ฅ์„ ๋ฐœํœ˜ํ•˜๋ ค ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋•๋Š” ์ผ์— ์ฆ๊ฑฐ์›€๊ณผ ๋งŒ์กฑ๊ฐ์„ ๋А๋‚๋‹ˆ๋‹ค. ์„ธ์‹ฌํ•จ๊ณผ ํ†ต์ฐฐ๋ ฅ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ณต๊ฐ์„ ์ด๋Œ์–ด๋ƒ…๋‹ˆ๋‹ค. ํ—Œ์‹ ์ ์ธ ์ดํƒ€์ฃผ์˜์ž์ด๋ฉฐ ๋ฆฌ๋”์‹ญ ๊ธฐ์ˆ ์ด ๊ฐ•ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์ด๋„๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ด์ •์ ์ด๊ณ  ํ—Œ์‹ ์ ์œผ๋กœ ๋‚จ์„ ๋ฐฐ๋ คํ•˜๊ณ  ๋™๋ฃŒ์—๊ฒŒ ์กฐ์–ธ์„ ์ฃผ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.",
18
+ "ENFP": "ENFP๋Š” ์ž์œ ๋กœ์šด ์˜ํ˜ผ์œผ๋กœ ์™ธํ–ฅ์ ์ด๊ณ  ์†”์งํ•˜๋ฉฐ ๊ฐœ๋ฐฉ์ ์ธ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ํ™œ๊ธฐ์ฐจ๊ณ  ๋‚™๊ด€์ ์ธ ํƒœ๋„๋กœ ์‚ด์•„๊ฐ€๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ฐ์ •์ ์œผ๋กœ ๊นŠ๊ณ  ์˜๋ฏธ ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ฒƒ์„ ์ถ”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒ์ƒ๋ ฅ๊ณผ ์ฐฝ์˜๋ ฅ์ด ํ’๋ถ€ํ•˜๊ณ  ํ˜ธ๊ธฐ์‹ฌ์ด ๋งŽ์€ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ์ž๊ธฐ ์„ฑ์ฐฐ์ ์ธ ๋ชจ์Šต์„ ๋ณด์ผ ๋•Œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ธ์ •์ ์ธ ์—๋„ˆ์ง€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์ด๋„๋Š” ์ง€๋„์ž์˜ ์—ญํ• ์„ ๋งก์„ ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.",
19
+ "ISTJ": "ISTJ๋Š” ์ง„์‹คํ•˜๊ฒŒ ํ–‰๋™ํ•˜๊ณ  ์ž๊ธฐ ์ƒ๊ฐ์„ ์†”์งํ•˜๊ฒŒ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜„์‹ค ๊ฐ๊ฐ์ด ๋›ฐ์–ด๋‚˜ ์œ„๊ธฐ ์ƒํ™ฉ์—์„œ๋„ ํ˜„์‹ค์ ์ด๊ณ  ๋…ผ๋ฆฌ์ ์ธ ํƒœ๋„๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฒด๊ณ„์™€ ์ „ํ†ต์„ ์ค‘์‹œํ•˜๊ณ  ์œ„๊ณ„์งˆ์„œ๊ฐ€ ๋ช…ํ™•ํ•œ ํ™˜๊ฒฝ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ์ผ์ด ์žˆ์–ด๋„ ์ž์‹ ์˜ ์˜๋ฌด๋ฅผ ์ง€ํ‚ค๋ ค๋Š” ์„ฑํ–ฅ์ด ์žˆ๊ณ  ์ฑ…์ž„๊ฐ์ด ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ˆ˜ํ–ˆ์„ ๋•Œ ์ด๋ฅผ ์ธ์ •ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋งŒํšŒํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” ํŽธ์ž…๋‹ˆ๋‹ค.",
20
+ "ISFJ": "ISFJ๋Š” ๊ทผ๋ฉดํ•˜๊ณ  ํ—Œ์‹ ์ ์ธ ์„ฑ๊ฒฉ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•ด ์ฑ…์ž„๊ฐ์„ ๋А๋‚๋‹ˆ๋‹ค. ๋งˆ๊ฐ ๊ธฐํ•œ์„ ์ฒ ์ €ํžˆ ์ง€ํ‚ค๊ณ  ์งˆ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋ฌต๋ฌตํžˆ ํ—Œ์‹ ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ๋Šฅํ•˜๊ณ  ๊ธ์ •์ ์ธ ์„ฑ๊ฒฉ์ด๋ฉฐ ์„ธ์‹ฌํ•˜๊ณ  ๋ถ„์„๋Šฅ๋ ฅ์ด ๋›ฐ์–ด๋‚˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ดํ–ฅ์ ์ธ ์„ฑ๊ฒฉ์ธ ๋™์‹œ์— ๋Œ€์ธ ๊ด€๊ณ„ ๋Šฅ๋ ฅ๋„ ๋›ฐ์–ด๋‚˜ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๊ณผ ๊นŠ์€ ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝ์ฃผ์˜์ ์ธ ์„ฑํ–ฅ์ด ์žˆ์–ด ์ผ์— ์ตœ์„ ์„ ๋‹คํ•ฉ๋‹ˆ๋‹ค.",
21
+ "ESTJ": "ESTJ๋Š” ์ „ํ†ต๊ณผ ์งˆ์„œ๋ฅผ ์ค‘์‹œํ•˜๋Š” ์„ฑ๊ฒฉ์œผ๋กœ ์‚ฌํšŒ์  ๊ธฐ์ค€์— ๋”ฐ๋ผ ํ™”ํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ •์ง, ํ—Œ์‹ , ์กด์—„์„ฑ์„ ์ค‘์‹œํ•˜๋ฉฐ ์ฃผ๋ณ€์„ ๊ด€์ฐฐํ•˜๋Š” ๋Šฅ๋ ฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๊ณ„ํš์„ ๊ฐœ์„ ํ•˜๊ณ  ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•˜์—ฌ ์–ด๋ ค์šด ์ž‘์—…๋„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ•์น˜์ฃผ์˜๋ฅผ ์‹ ๋ด‰ํ•˜๊ณ  ๊ถŒ์œ„๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋…ธ๋ ฅ์„ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋ชจ๋ฒ”์„ ๋ณด์ด๋Š” ์ง€๋„์ž์  ์„ฑ๊ฒฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.",
22
+ "ESFJ": "ESFJ๋Š” ์นœ์ ˆํ•˜๊ณ  ์˜ˆ์˜ ๋ฐ”๋ฅธ ํƒœ๋„๋กœ ๊ณต๋™์ฒด์˜ ๊ธฐ๋ฐ˜์ด ๋˜๊ณ  ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ๊ฐ•ํ•œ ์ฑ…์ž„๊ฐ์„ ๋А๋‚๋‹ˆ๋‹ค. ๊ด€์Šต์„ ์กด์ค‘ํ•˜๋Š” ๋™์‹œ์— ์ž์‹ ์˜ ์˜๊ฒฌ์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ•, ๊ทœ์œจ, ๊ด€์Šต์„ ์ค‘์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋ ค์‹ฌ์ด ๋งŽ๊ณ  ์™ธํ–ฅ์ ์ธ ์„ฑ๊ฒฉ์œผ๋กœ ์žฅ๊ธฐ์ ์ธ ๊ด€๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„ํš๋œ ์ผ์ •์„ ์„ ํ˜ธํ•˜๊ณ  ์ผ์ด ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰๋˜๋„๋ก ์ฑ…์ž„์„ ๋‹คํ•ฉ๋‹ˆ๋‹ค.",
23
+ "ISTP": "ISTP๋Š” ํ˜ธ๊ธฐ์‹ฌ์„ ํ†ตํ•ด ์„ธ์ƒ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์ง์ ‘ ํƒ๊ตฌํ•˜๋Š” ์ผ์„ ์ฆ๊น๋‹ˆ๋‹ค. ์†๊ธฐ์ˆ ์ด ๋›ฐ์–ด๋‚˜๊ณ  ๋ฌผ๊ฑด์„ ๋ถ„ํ•ดํ•˜๊ณ  ์กฐ๋ฆฝํ•˜๋Š” ์ผ์„ ์ฆ๊น๋‹ˆ๋‹ค. ๋ฌผ๊ฑด์„ ์ œ์ž‘ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ์ง์ ‘ ๊ฒฝํ—˜ํ•จ์œผ๋กœ์จ ์•„์ด๋””์–ด์— ๋Œ€ํ•ด ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๋‚จ์„ ๋•๊ณ  ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๋Š” ์ผ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์นœ์ ˆํ•˜์ง€๋งŒ ๋‚ดํ–ฅ์ ์ด๊ณ  ์ฐจ๋ถ„ํ•˜์ง€๋งŒ ์ฆ‰ํฅ์ ์ธ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ์ธ๊ฐ„๊ด€๊ณ„์—์„œ ํ–‰๋™์„ ์ค‘์‹œํ•˜๊ณ  ์ž์œ ๋กœ์šด ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค.",
24
+ "ISFP": "ISFP๋Š” ํ˜ธ๊ธฐ์‹ฌ์ด ๋งŽ๊ณ  ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ถ”๊ตฌํ•˜๋Š” ์„ฑ๊ฒฉ์œผ๋กœ ์ž์‹ ์˜ ๊ฐœ์„ฑ์„ ์ž˜ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. ์œ ์—ฐํ•œ ์„ฑ๊ฒฉ์œผ๋กœ ์ฆ‰ํฅ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์‚ถ์„ ์‚ด์•„๊ฐ‘๋‹ˆ๋‹ค. ๊ด€์šฉ์ ์ด๊ณ  ๊ฐœ๋ฐฉ์ ์ด๋ฉฐ ๋‚ดํ–ฅ์ ์ธ ์„ฑ๊ฒฉ์œผ๋กœ ํ˜ผ์ž๋งŒ์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๊ณ  ์ž์‹ ์˜ ์ •์ฒด์„ฑ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ฉ๋‹ˆ๋‹ค. ๋›ฐ์–ด๋‚œ ์ฐฝ์˜๋ ฅ๊ณผ ํ†ต์ฐฐ๋ ฅ์œผ๋กœ ํ˜„์žฌ์— ๊ฐ€์žฅ ์ ์ ˆํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.",
25
+ "ESTP": "ESTP๋Š” ์ง์„ค์ ์ธ ์œ ๋จธ ๊ฐ๊ฐ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์œผ๋ฉฐ ๊ด€์‹ฌ์„ ๋ฐ›๋Š” ์ผ์„ ์ฆ๊น๋‹ˆ๋‹ค. ํ˜„์‹ค์ ์ธ ์ฃผ์ œ๋ฅผ ์„ ํ˜ธํ•˜๊ณ  ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์œผ๋ฉฐ ํ–‰๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์œ„ํ—˜์„ ์ถ”๊ตฌํ•˜๋Š” ์„ฑ๊ฒฉ์ด ๊ฐ•ํ•˜๋ฉฐ ํ˜„์žฌ์— ์ง‘์ค‘ํ•˜๊ณ  ๊ด€์ฐฐ๋ ฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค. ์—ด์ •๊ณผ ์—๋„ˆ์ง€๊ฐ€ ๋„˜์น˜๊ณ  ๊ฐ•ํ•œ ์ •์‹ ๋ ฅ์„ ๊ฐ€์ง„ ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์„ ์ด๋Œ๊ณ  ์ฆ๊ฑฐ์›€์„ ์„ ์‚ฌํ•˜๋Š” ์ง€๋„์ž์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
26
+ "ESFP": "ESFP๋Š” ์ฆ‰ํฅ์ ์ด๊ณ  ์‚ฌ๊ต์ ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š” ์ผ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ์  ๊ฐ๊ฐ๊ณผ ํŒจ์…˜ ๊ฐ๊ฐ์ด ๋›ฐ์–ด๋‚˜ ๊พธ๋ฏธ๋Š” ์ผ์— ์†Œ์งˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ํฅ์ ์ธ ์ฆ๊ฑฐ์›€์„ ์ถ”๊ตฌํ•˜์—ฌ ํ–‰์šด์ด๋‚˜ ์šฐ์—ฐํ•œ ๊ธฐํšŒ์— ์˜์กดํ•ฉ๏ฟฝ๏ฟฝ๏ฟฝ๋‹ค. ๋ฌผ๊ฑด๊ณผ ๊ฐ€์น˜์˜ ํ’ˆ์งˆ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋›ฐ์–ด๋‚œ ์†Œ์งˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.",
27
+ "INTJ": "INTJ๋Š” ์ด์„ฑ์ ์ด๊ณ  ๋‘๋‡Œ ํšŒ์ „์ด ๋น ๋ฅธ ์„ฑ๊ฒฉ์œผ๋กœ, ๋Š์ž„์—†์ด ์ƒ๊ฐํ•˜๊ณ  ์ฃผ๋ณ€์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋ถ„์„ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์— ์˜๋ฌธ์„ ์ œ๊ธฐํ•˜๊ณ  ์‹ค์ œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด๋งŒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๊ทธ ์•„์ด๋””์–ด๋ฅผ ์ด์šฉํ•ด ์„ฑ๊ณต์„ ์Ÿ์ทจํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ†ต์ฐฐ๋ ฅ๊ณผ ๋…ผ๋ฆฌ๋ ฅ์œผ๋กœ ์—…๋ฌด๋ฅผ ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…๋ฆฝ์„ฑ์ด ๋งค์šฐ ๊ฐ•ํ•˜์—ฌ ํ˜ผ์ž์„œ ํ–‰๋™ํ•˜๋ ค๋Š” ์„ฑํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์ƒ๋ ฅ์ด ๋„˜์น˜๋ฉฐ ๊ฒฐ๋‹จ๋ ฅ์ด ๊ฐ•ํ•˜๊ณ  ์•ผ๋ง์ด ๋„˜์น˜๋ฉด์„œ๋„ ์ฐจ๋ถ„ํ•˜๊ณ  ํ˜ธ๊ธฐ์‹ฌ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.",
28
+ "INTP": "INTP๋Š” ์ฐฝ์˜์ ์ด๊ณ  ๋…์ฐฝ์ ์ด๋ฉฐ ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋ฌด์—‡์„ ์ƒ๊ฐํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์•„์ด๋””์–ด์™€ ์งˆ๋ฌธ์„ ๋– ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ์ƒ๊ฐ์ด ๊นŠ๊ณ  ๋‚ด์„ฑ์ ์ธ ์„ฑ๊ฒฉ์œผ๋กœ ํ˜ผ์ž๋งŒ์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ† ๋ก ํ•˜๊ณ  ์•„์ด๋””์–ด๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ผ๊ณผ ํŒจํ„ด์„ ๋ถ„์„ํ•˜๋Š” ์ผ์„ ์ฆ๊น๋‹ˆ๋‹ค.",
29
+ "ENTJ": "ENTJ๋Š” ์นด๋ฆฌ์Šค๋งˆ์™€ ์ž์‹ ๊ฐ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์œผ๋ฉฐ ๋ƒ‰์ฒ ํ•œ ์ด์„ฑ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์„ ์„ฑ์ทจํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋„์ „์„ ์ฆ๊ธฐ๋Š” ์„ฑ๊ฒฉ์œผ๋กœ, ์ „๋žต์  ์‚ฌ๊ณ  ๋Šฅ๋ ฅ๊ณผ ์žฅ๊ธฐ์  ๋ชฉํ‘œ์— ์ง‘์ค‘ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋„์ „ ๊ณผ์ œ์™€ ์ง€์  ๋Œ€๊ฒฐ์„ ์ฆ๊ธฐ๊ณ  ๋…ผ์Ÿ์„ ์ฆ๊ฑฐ์›Œํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ •์ ์œผ๋กœ ๋ฌด๊ด€์‹ฌํ•˜๋ฉฐ ๋น„ํšจ์œจ๊ณผ ๋ฌด๋Šฅ๋ ฅ์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค.",
30
+ "ENTP": "ENTP๋Š” ๋‘๋‡Œ ํšŒ์ „์ด ๋น ๋ฅด๊ณ  ๋Œ€๋‹ดํ•œ ์„ฑ๊ฒฉ์œผ๋กœ ๊ฒฉ๋ ฌํ•˜๊ฒŒ ๋…ผ์Ÿํ•˜๋Š” ์ผ์„ ์ฆ๊น๋‹ˆ๋‹ค. ์ง€์‹์ด ํ’๋ถ€ํ•˜๊ณ  ํ˜ธ๊ธฐ์‹ฌ์ด ๋„˜์น˜๋ฉฐ ์œ ๋จธ ๊ฐ๊ฐ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์ฆ๊ฒ๊ฒŒ ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹ ๋…์— ์˜๋ฌธ์„ ์ œ๊ธฐํ•˜๊ณ  ์•„์ด๋””์–ด๋ฅผ ์„ธ์‹ฌํžˆ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™์„ ์ฒ ์ €ํžˆ ๊ฒ€์ฆํ•˜๊ณ  ๊ฐ๊ด€์ ์œผ๋กœ ๋ฐ”๋ผ๋ณด๊ธฐ ์œ„ํ•ด ์ž์‹ ์˜ ์˜๊ฒฌ์— ๋ฐ˜๋ก ์„ ์ œ๊ธฐํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด์„ฑ๊ณผ ๋…ผ๋ฆฌ์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ์ธ๊ฐ„๊ด€๊ณ„์—์„œ ๊ฐˆ๋“ฑ์ด ๋ฐœ์ƒํ•  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.",
31
+ "INFJ": "INFJ๋Š” ์ด์ƒ์ฃผ์˜์ ์ด๊ณ  ์›์น™์ฃผ์˜์ ์ธ ์„ฑ๊ฒฉ์œผ๋กœ, ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณต์„ ์ž์•„์‹คํ˜„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์„ ์„ ์‹ค์ฒœํ•ฉ๋‹ˆ๋‹ค. ์›์น™๊ณผ ์™„๋ฒฝํ•จ์„ ์ค‘์‹œํ•˜๋ฉฐ ์ง€ํ˜œ์™€ ์ง๊ด€์„ ํ†ตํ•ด ์ค‘์š”ํ•œ ๊ฐ€์น˜๋ฅผ ์ฐพ์œผ๋ ค๋Š” ๋…ธ๋ ฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฐฝ์˜๋ ฅ, ์ƒ์ƒ๋ ฅ, ์„ธ์‹ฌํ•จ์„ ํ™œ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋•์Šต๋‹ˆ๋‹ค. ๋‚ดํ–ฅ์ ์ธ ์„ฑ๊ฒฉ์ด๋ฉฐ ๊ณต๊ฐ ๋Šฅ๋ ฅ์ด ๋›ฐ์–ด๋‚˜ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.",
32
+ "INFP": "INFP๋Š” ์ฐฝ์˜์ ์ด๊ณ  ์ƒ์ƒ๋ ฅ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ๋ชฝ์ƒ์„ ์ฆ๊ธฐ๋Š” ์„ฑ๊ฒฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ˆ , ์ž์—ฐ์— ๋Œ€ํ•œ ๊ฐ์ˆ˜์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฐ์ •์„ ๋น ๋ฅด๊ฒŒ ์•Œ์•„์ฐจ๋ฆฝ๋‹ˆ๋‹ค. ๊ณต๊ฐ๋ ฅ์ด ๋†’์•„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋„์™€์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ๋ช…๊ฐ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ž๊ธฐ ์„ฑ์ฐฐ์ ์ธ ์„ฑ๊ฒฉ์œผ๋กœ ์ž๊ธฐ ์ƒ๊ฐ๊ณผ ๊ฐ์ •์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ์†”์งํ•จ์„ ์ค‘์‹œํ•˜๊ณ  ์ž์‹ ์„ ํ‘œํ˜„ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค."
33
+ }
34
+
35
+ woe_dict = {
36
+ '๋ชฉ': ("๋ชฉ(ๆœจ) ๊ธฐ์šด์ด ๊ฐ•ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด์™€ ์„ฑ์žฅ์„ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ธด๋‹ค. ์ƒˆ๋กœ์šด ์‹œ๋„์™€ ๋ณ€ํ™”๋ฅผ ์ž˜ ๋ฐ›์•„๋“ค์ด๋Š” ํŽธ์ด๋‹ค. ์ฒ˜์Œ ํ•ด๋ณด๋Š” ์ผ์ด๋‚˜ ๋ฐœ์ „ ๊ฐ€๋Šฅ์„ฑ์ด ๋ณด์ด๋Š” ๋ถ„์•ผ์— ๋Œ๋ฆฌ๊ธฐ ์‰ฝ๋‹ค."),
37
+ 'ํ™”': ("ํ™”(็ซ) ๊ธฐ์šด์ด ๊ฐ•ํ•˜๋ฉด ์—ด์ •์ ์œผ๋กœ ์›€์ง์ด๊ณ , ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์—๋„ˆ์ง€๋ฅผ ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ธฐ ์‰ฝ๋‹ค. ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•˜๋‹ค. ์‚ฌ๋žŒ๋“ค ์•ž์—์„œ ์ž์‹ ์˜ ์ƒ๊ฐ์„ ๋“œ๋Ÿฌ๋‚ด๋Š” ์ผ์— ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค."),
38
+ 'ํ† ': ("ํ† (ๅœŸ) ๊ธฐ์šด์ด ๊ฐ•ํ•˜๋ฉด ์•ˆ์ •๊ฐ๊ณผ ์ฑ…์ž„๊ฐ์„ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ธด๋‹ค. ์‚ฌ๋žŒ๋“ค ์‚ฌ์ด์—์„œ ์ค‘์‹ฌ์„ ์žก์•„์ฃผ๊ณ  ์ผ์„ ๊พธ์ค€ํžˆ ์ด์–ด๊ฐ€๋Š” ๋ฐ ๊ฐ•์ ์„ ๋ณด์ธ๋‹ค. ์ฒด๊ณ„์ ์ด๊ณ  ๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์„ ๋งก๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค."),
39
+ '๊ธˆ': ("๊ธˆ(้‡‘) ๊ธฐ์šด์ด ๊ฐ•ํ•˜๋ฉด ๋…ผ๋ฆฌ์ ์ด๊ณ  ๋ถ„์„์ ์ธ ์„ฑํ–ฅ์ด ๋‘๋“œ๋Ÿฌ๋”˜๋‹ค. ๊ทœ์น™๊ณผ ์›์น™์„ ์ง€ํ‚ค๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ผํ•˜๋Š” ๊ฒƒ์„ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ผ์—์„œ ๊ฐ•์ ์„ ๋ฐœํœ˜ํ•œ๋‹ค."),
40
+ '์ˆ˜': ("์ˆ˜(ๆฐด) ๊ธฐ์šด์ด ๊ฐ•ํ•˜๋ฉด ์ƒํ™ฉ์˜ ํ๋ฆ„๊ณผ ์‚ฌ๋žŒ๋“ค์˜ ๊ฐ์ •์„ ์ž˜ ์ฝ๋Š”๋‹ค. ๊นŠ์ด ์žˆ๊ฒŒ ๊ณ ๋ฏผํ•˜๊ณ  ํƒ๊ตฌํ•˜๋Š” ์„ฑํ–ฅ์ด ์žˆ๋‹ค. ์กฐ์šฉํžˆ ๊ด€์ฐฐํ•˜๊ณ  ๋ถ„์„ํ•˜๊ฑฐ๋‚˜, ์‚ฌ๋žŒ๋“ค์˜ ๋งˆ์Œ์„ ์ดํ•ดํ•˜๋Š” ์—ญํ• ์— ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.")
41
+ }
42
+
43
+
44
+ if not os.path.exists(DATA_PATH):
45
+ raise FileNotFoundError(f"๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค: {DATA_PATH} (Space ๋ฃจํŠธ์— ์—…๋กœ๋“œํ•˜์„ธ์š”)")
46
+
47
+ df = pd.read_csv(DATA_PATH)
48
+
49
+ def to_list(x):
50
+ if isinstance(x, str):
51
+ return ast.literal_eval(x)
52
+ return []
53
+
54
+ df["๊ด€๋ จํ•™๊ณผ"] = df["๊ด€๋ จํ•™๊ณผ"].apply(to_list)
55
+
56
+ def filter_by_major(df, user_major, major_col = "๊ด€๋ จํ•™๊ณผ"):
57
+ def to_list(x):
58
+ if isinstance(x, str):
59
+ return ast.literal_eval(x)
60
+ return []
61
+
62
+ df[major_col] = df[major_col].apply(to_list)
63
+
64
+ def is_major_in_list(majors):
65
+ found = any(user_major in major for major in majors)
66
+ return found
67
+
68
+ filtered_df = df[df[major_col].apply(is_major_in_list)]
69
+
70
+ if filtered_df.empty:
71
+ print(f"โ€ป ํ•„ํ„ฐ๋ง๋œ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
72
+ return filtered_df
73
+
74
+ def recommend_jobs(mbti_key,
75
+ woe_key,
76
+ jobs_df,
77
+ top_n = 3,
78
+ model_name = "jhgan/ko-sbert-multitask",
79
+ job_name_col = "์ง์—…๋ช…",
80
+ job_sent_col = "ํฅ๋ฏธ์ ์„ฑ",
81
+ job_duty_col = "์ฃผ์š”์—…๋ฌด",
82
+ weight_mbti = 0.5,
83
+ weight_woe = 0.5,
84
+ batch_size = 64):
85
+
86
+ mbti_text = mbti_dict.get(mbti_key.upper(), mbti_key)
87
+ woe_text = woe_dict.get(woe_key, woe_key)
88
+
89
+ model = SentenceTransformer(model_name)
90
+
91
+ # mbti, ์˜คํ–‰ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ
92
+ mbti_emb = model.encode(str(mbti_text), convert_to_tensor = True)
93
+ woe_emb = model.encode(str(woe_text), convert_to_tensor = True)
94
+
95
+ # ์‚ฌ์šฉ์ž์˜ ์ตœ์ข… ๋ฒกํ„ฐ(0.5*mbti๋ฒกํ„ฐ + 0.5*์˜คํ–‰๋ฒกํ„ฐ)
96
+ mbti_emb = F.normalize(mbti_emb, p=2, dim=0)
97
+ woe_emb = F.normalize(woe_emb, p=2, dim=0)
98
+ combined = weight_mbti * mbti_emb + weight_woe * woe_emb
99
+ user_vec = F.normalize(combined, p=2, dim=0).unsqueeze(0)
100
+
101
+ # ์ง์—… ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ + ์ •๊ทœํ™”
102
+ job_sents = jobs_df[job_sent_col].astype(str).tolist()
103
+ job_embs = model.encode(job_sents,
104
+ convert_to_tensor = True,
105
+ batch_size = batch_size,
106
+ show_progress_bar = False)
107
+ job_embs = F.normalize(job_embs, p=2, dim=1)
108
+
109
+ #######-------- ์ฝ”์‚ฌ์ธ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ --------#######
110
+ sims = util.cos_sim(user_vec, job_embs)[0]
111
+
112
+ # top3 ์ถ”์ถœ
113
+ k = min(top_n, job_embs.shape[0])
114
+ topk = torch.topk(sims, k=k)
115
+ top_vals = topk.values.cpu().numpy().tolist()
116
+ top_idxs = topk.indices.cpu().numpy().tolist()
117
+
118
+ results = []
119
+ for idx, score in zip(top_idxs, top_vals):
120
+ name = str(jobs_df.iloc[idx][job_name_col])
121
+ if job_duty_col in jobs_df.columns and pd.notna(jobs_df.iloc[idx][job_duty_col]):
122
+ duty = str(jobs_df.iloc[idx][job_duty_col])
123
+ else:
124
+ duty = str(jobs_df.iloc[idx][job_sent_col])
125
+ results.append((name, float(score), duty))
126
+
127
+ formatted = f"=== ์ƒ์œ„ {len(results)}๊ฐœ ์ง์—… ์ถ”์ฒœ ===\n"
128
+ for i, (name, score, duty) in enumerate(results, start=1):
129
+ formatted += f"{i}. {name}\n"
130
+ formatted += f"์ฃผ์š”์—…๋ฌด: {duty}\n\n"
131
+
132
+ return results
133
+
134
+ def generate_recommendation_reason(job_name, job_duty, mbti_key, woe_key, similarity_score):
135
+ """
136
+ OpenAI GPT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์—… ์ถ”์ฒœ ์ด์œ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
137
+ """
138
+ api_key = os.environ.get("OPENAI_API_KEY")
139
+ if not api_key:
140
+ return "(OPENAI_API_KEY๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Space Settings โ†’ Secrets์— ํ‚ค๋ฅผ ๋“ฑ๋กํ•˜์„ธ์š”.)"
141
+
142
+ # OpenAI ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ (์›๋ณธ์—์„œ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹ ์œ ์ง€)
143
+ client = OpenAI(api_key=api_key)
144
+
145
+ # ์‚ฌ์šฉ์ž ์„ฑ๊ฒฉ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
146
+ mbti_desc = mbti_dict.get(mbti_key.upper(), "")
147
+ woe_desc = woe_dict.get(woe_key, "")
148
+
149
+ # ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ (์›๋ณธ ๋‚ด์šฉ ์œ ์ง€)
150
+ prompt = f"""๋‹น์‹ ์€ ์ง„๋กœ ์ƒ๋‹ด ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด ์ง์—…์„ ์ถ”์ฒœํ•˜๋Š” ์ด์œ ๋ฅผ 2-3๋ฌธ์žฅ์œผ๋กœ ๊ฐ„๋‹จ๋ช…๋ฃŒํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
151
+
152
+ **์‚ฌ์šฉ์ž ์ •๋ณด:**
153
+ - MBTI: {mbti_key}
154
+ - MBTI ํŠน์„ฑ: {mbti_desc}
155
+ - ์šฐ์„ธ์˜คํ–‰: {woe_key}
156
+ - ์˜คํ–‰ ํŠน์„ฑ: {woe_desc}
157
+
158
+ **์ถ”์ฒœ ์ง์—…:**
159
+ - ์ง์—…๋ช…: {job_name}
160
+ - ์ฃผ์š”์—…๋ฌด: {job_duty}
161
+ - ์œ ์‚ฌ๋„: {similarity_score:.2f}
162
+
163
+ ์‚ฌ์šฉ์ž์˜ MBTI ์„ฑํ–ฅ๊ณผ ์˜คํ–‰ ๊ธฐ์งˆ์ด ์ด ์ง์—…์˜ ํŠน์„ฑ๊ณผ ์–ด๋–ป๊ฒŒ ์ž˜ ๋งž๋Š”์ง€ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
164
+ ์นœ๊ทผํ•˜๊ณ  ๊ฒฉ๋ คํ•˜๋Š” ํ†ค์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”."""
165
+
166
+ try:
167
+ # GPT API ํ˜ธ์ถœ (์›๋ณธ์—์„œ ์‚ฌ์šฉํ•œ ํ˜•์‹ ์œ ์ง€)
168
+ response = client.chat.completions.create(
169
+ model="gpt-4o-mini", # ๋˜๋Š” "gpt-4o", "gpt-3.5-turbo"
170
+ messages=[
171
+ {"role": "user", "content": prompt}
172
+ ],
173
+ max_tokens=300,
174
+ temperature=0.7
175
+ )
176
+
177
+ # ์‘๋‹ต ํ…์ŠคํŠธ ์ถ”์ถœ
178
+ # (์›๋ณธ๊ณผ ๋™์ผํ•œ ์ ‘๊ทผ๋ฐฉ์‹ ์œ ์ง€ํ•˜๋˜ SDK ๋ฐ˜ํ™˜ํ˜•ํƒœ์— ๋”ฐ๋ผ ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ)
179
+ try:
180
+ reason = response.choices[0].message.content
181
+ except Exception:
182
+ reason = str(response)
183
+ return reason
184
+
185
+ except Exception as e:
186
+ return f"(์ถ”์ฒœ ์ด์œ  ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)})"
187
+
188
+ def resulting(user_major, mbti_key, woe_key, top_n = 3):
189
+ # ์ „๊ณต ํ•„ํ„ฐ
190
+ filtered = filter_by_major(df.copy(), user_major)
191
+ if filtered is None or (hasattr(filtered, "empty") and filtered.empty):
192
+ return "โ€ป ํ•„ํ„ฐ๋ง๋œ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
193
+
194
+ # ์ถ”์ฒœ (top_n ์ „๋‹ฌ)
195
+ try:
196
+ recs = recommend_jobs(mbti_key, woe_key, filtered, top_n=top_n)
197
+ except Exception as e:
198
+ return f"recommend_jobs ์‹คํ–‰ ์ค‘ ์˜ค๋ฅ˜: {type(e).__name__}: {e}"
199
+
200
+ # ๊ฒฐ๊ณผ๊ฐ€ ๋นˆ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ
201
+ if not recs:
202
+ return "์ถ”์ฒœ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
203
+
204
+ # ๊ฒฐ๊ณผ ์ถœ๋ ฅ (์ถ”์ฒœ ์ด์œ  ํฌํ•จ)
205
+ output = f"=== ์ƒ์œ„ {len(recs)}๊ฐœ ์ง์—… ์ถ”์ฒœ ===\n\n"
206
+
207
+ for i, (name, score, duty) in enumerate(recs, start=1):
208
+ output += f"{i}. {name}\n"
209
+ output += f" ์œ ์‚ฌ๋„: {score:.4f}\n"
210
+ output += f" ์ฃผ์š”์—…๋ฌด: {duty}\n\n"
211
+
212
+ # LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ฒœ ์ด์œ  ์ƒ์„ฑ
213
+ reason = generate_recommendation_reason(name, duty, mbti_key, woe_key, score)
214
+ output += f" ๐Ÿ’ก ์ถ”์ฒœ ์ด์œ :\n {reason}\n"
215
+ output += "-" * 80 + "\n\n"
216
+
217
+ return output
218
+
219
+ user_major = gr.Dropdown(choices = ['๊ด€๋ จ์—†์Œ', 'IT์œตํ•ฉํ•™๊ณผ','๊ฐ„ํ˜ธํ•™๊ณผ','๊ฑด๊ฐ•๊ด€๋ฆฌํ•™๊ณผ',
220
+ '๊ฑด์ถ•๊ณตํ•™๊ณผ','๊ฒŒ์ž„๊ณตํ•™๊ณผ','๊ฒฝ์˜/ํšŒ๊ณ„ํ•™๊ณผ','๊ฒฝ์ œํ•™๊ณผ','๊ฒฝ์ฐฐํ–‰์ •ํ•™๊ณผ','๊ฒฝํ˜ธํ•™๊ณผ','๊ณ ๊ณ ํ•™๊ณผ','๊ณ ๋ถ„์ž๊ณตํ•™๊ณผ','๊ณต์—…๋””์ž์ธํ•™๊ณผ','๊ณต์˜ˆํ•™๊ณผ','๊ณผํ•™๊ต์œก๊ณผ',
221
+ '๊ด€๊ด‘ํ†ต์—ญ๊ณผ','๊ด€ํ˜„์•…๊ณผ','๊ด‘๊ณ ๋””์ž์ธํ•™๊ณผ','๊ด‘๊ณ ํ™๋ณดํ•™๊ณผ','๊ต์–‘๊ณตํ•™๋ถ€','๊ต์œกํ•™๊ณผ','๊ตํ†ต๊ณตํ•™๊ณผ','๊ตญ๋ฐฉ๊ธฐ์ˆ ํ•™๊ณผ','๊ตญ์•…ํ•™๊ณผ','๊ตญ์–ด๊ต์œก๊ณผ','๊ตญ์–ด๊ตญ๋ฌธํ•™๊ณผ','๊ตญ์ œํ†ต์ƒํ•™๊ณผ',
222
+ '๊ตญ์ œํ•™๊ณผ','๊ตฐ์‚ฌํ•™๊ณผ','๊ทธ๋ž˜ํ”ฝ๋””์ž์ธ๊ณผ','๊ธˆ์†๊ณต์˜ˆํ•™๊ณผ','๊ธˆ์†๊ณตํ•™๊ณผ','๊ธˆ์œต๋ณดํ—˜ํ•™๊ณผ','๊ธˆํ˜•์„ค๊ณ„๊ณผ','๊ธฐ๊ณ„๊ณตํ•™๊ณผ','๊ธฐ๋…๊ตํ•™๊ณผ','๊ธฐ์•…๊ณผ','๋‚˜๋…ธ๊ณตํ•™๊ณผ','๋ƒ‰๋™๊ณต์กฐ๊ณตํ•™๊ณผ',
223
+ '๋…ธ์ธ๋ณต์ง€ํ•™๊ณผ','๋†์—…ํ•™๊ณผ','๋Œ€๊ธฐ๊ณผํ•™๊ณผ','๋„์‹œ๊ณตํ•™๊ณผ','๋…์–ด๋…๋ฌธํ•™๊ณผ','๋™๋ฌผ์ž์›ํ•™๊ณผ','๋™์–‘ํ™”๊ณผ','๋””์ง€ํ„ธ๋””์ž์ธํ•™๊ณผ','๋””์ง€ํ„ธ๋ฏธ๋””์–ด๊ณผ','๋ ˆ์ €์Šคํฌ์ธ ํ•™๊ณผ','๋ ˆํฌ๋ฆฌ์—์ด์…˜๊ณผ',
224
+ '๋กœ๋ด‡๊ณตํ•™๊ณผ','๋งˆ์ผ€ํŒ…๊ฒฝ์˜๊ณผ','๋งŒํ™”์• ๋‹ˆ๋ฉ”์ด์…˜ํ•™๊ณผ','๋ฉ”์ดํฌ์—…์•„ํ‹ฐ์ŠคํŠธ๊ณผ','๋ฉ”์นดํŠธ๋กœ๋‹‰์Šค๊ณตํ•™๊ณผ','๋ชจ๋ธ๊ณผ','๋ชจ๋ฐ”์ผ์‹œ์Šคํ…œ๊ณตํ•™๊ณผ','๋ฌด๋„ํ•™๊ณผ','๋ฌด์—ญํ•™๊ณผ','๋ฌด์šฉํ•™๊ณผ','๋ฌด์ธํ•ญ๊ณตํ•™๊ณผ',
225
+ '๋ฌธ์˜ˆ์ฐฝ์ž‘๊ณผ','๋ฌธํ—Œ์ •๋ณดํ•™๊ณผ','๋ฌธํ™”์žฌ๋ณด์กดํ•™๊ณผ','๋ฌธํ™”์žฌํ•™๊ณผ','๋ฌธํ™”์ฝ˜ํ…์ธ ํ•™๊ณผ','๋ฌผ๋ฅ˜ํ•™๊ณผ','๋ฌผ๋ฆฌ์น˜๋ฃŒํ•™๊ณผ','๋ฌผ๋ฆฌํ•™๊ณผ','๋ฏธ์ˆ ๊ต์œก๊ณผ','๋ฏธ์ˆ ํ•™๊ณผ','๋ฏธ์šฉ๊ณผ','๋ฐ”์ด์˜ค์ƒ๋ช…ํ•™๊ณผ','๋ฐ˜๋„์ฒดํ•™๊ณผ','๋ฐ˜๋ ค๋™๋ฌผ๊ณผ',
226
+ '๋ฐฉ์‚ฌ์„ ๊ณผ','๋ฐฉ์†ก์—ฐ์˜ˆ๊ณผ','๋ฐฉ์†ก์˜์ƒ๊ณผ','๋ฒ•ํ•™๊ณผ','๋ฒค์ฒ˜์ฐฝ์—…ํ•™๊ณผ','๋ณด๊ฑด๊ด€๋ฆฌํ•™๊ณผ','๋ณด์„๊ฐ์ •๊ณผ','๋ถ€๋™์‚ฐํ•™๊ณผ','๋ถˆ๊ตํ•™๊ณผ','๋ถˆ์–ด๋ถˆ๋ฌธํ•™๊ณผ','๋น„์„œํ–‰์ •ํ•™๊ณผ','์‚ฌ์ง„์˜์ƒํ•™๊ณผ',
227
+ '์‚ฌํ•™๊ณผ','์‚ฌํšŒ๊ต์œก๊ณผ','์‚ฌํšŒ๋ณต์ง€ํ•™๊ณผ','์‚ฌํšŒํ•™๊ณผ','์‚ฐ๋ฆผ์ž์›ํ•™๊ณผ','์‚ฐ์—…/์ œํ’ˆ๋””์ž์ธํ•™๊ณผ','์‚ฐ์—…๊ณตํ•™๊ณผ','์‚ฐ์—…๋””์ž์ธํ•™๊ณผ',
228
+ '์‚ฐ์—…์„ค๋น„์ž๋™ํ™”๊ณผ','์‚ฐ์—…์•ˆ์ „๊ณผ','์‚ฐ์—…์ž ์ˆ˜๊ณผ','์ƒ๋ช…๊ณตํ•™๊ณผ','์ƒ๋ฌผ๊ต์œก๊ณผ','์„œ์–‘ํ™”๊ณผ','์„ฌ์œ ๊ณตํ•™๊ณผ','์„ฌ์œ ๋””์ž์ธํ•™๊ณผ','์„ฑ์•…๊ณผ','์„ธ๋ผ๋ฏน๊ณตํ•™๊ณผ','์†Œ๋ฐฉ์•ˆ์ „ํ•™๊ณผ',
229
+ '์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™๊ณผ','์ˆ˜์‚ฐํ•™๊ณผ','์ˆ˜์˜ํ•™๊ณผ','์ˆ˜ํ•™๊ณผ','์ˆ˜ํ•™๊ต์œก๊ณผ','์Šค๋งˆํŠธ์ •๋ณด๊ณผ','์ŠคํŽ˜์ธ์–ดํ•™๊ณผ','์‹œ๊ฐ๋””์ž์ธํ•™๊ณผ','์‹œ์Šคํ…œ๊ณตํ•™๊ณผ','์‹๋ฌผ์ž์›ํ•™๊ณผ','์‹ํ’ˆ์˜์–‘ํ•™๊ณผ','์‹ ๋ฌธ๋ฐฉ์†กํ•™๊ณผ','์‹ ์†Œ์žฌ๊ณตํ•™๊ณผ','์‹ ํ•™๊ณผ',
230
+ '์‹ค๋‚ด๋””์ž์ธํ•™๊ณผ','์‹ฌ๋ฆฌํ•™๊ณผ','์•„๋™ํ•™๊ณผ','์•ˆ๊ฒฝ๊ด‘ํ•™๊ณผ','์•ฝํ•™๋ถ€','์–ธ๋ก ํ™๋ณดํ•™๊ณผ','์–ธ์–ด๊ณผํ•™๊ณผ','์–ธ์–ด์น˜๋ฃŒํ•™๊ณผ','์—๋„ˆ์ง€์ž์›๊ณตํ•™๊ณผ',
231
+ '์—ญ์‚ฌ๊ต์œก๊ณผ','์—ฐ๊ทน์˜ํ™”๊ณผ','์—ฐ์˜ˆ๋งค๋‹ˆ์ง€๋จผํŠธ๊ณผ','์˜์ƒ/๋ฏธ๋””์–ดํ•™๊ณผ','์˜์–ด๊ต์œก๊ณผ','์˜์–ด์˜๋ฌธํ•™๊ณผ','์˜ˆ์ˆ ํ•™๊ณผ','์™ธ๊ตญ์–ด๊ต์œก๊ณผ','์™ธ์‹์‚ฐ์—…ํ•™๊ณผ','์šฐ์ฃผ๊ณผํ•™๊ณผ',
232
+ '์›์˜ˆํ•™๊ณผ','์›์ž๋ ฅ๊ณตํ•™๊ณผ','์œ ์•„๊ต์œกํ•™๊ณผ','์œ ์ „๊ณตํ•™๊ณผ','์œ ํ†ตํ•™๊ณผ','์œค๋ฆฌํ•™๊ณผ','์Œ์•…๊ต์œก๊ณผ','์Œ์•…ํ•™๊ณผ','์‘๊ธ‰๊ตฌ์กฐํ•™๊ณผ','์˜๋ฃŒ์ •๋ณด๊ณตํ•™๊ณผ','์˜๋ฅ˜/์˜์ƒํ•™๊ณผ',
233
+ '์˜์˜ˆ๊ณผ','์˜์šฉ๊ณตํ•™๊ณผ','์ด๋ฒคํŠธ์—ฐ์ถœ๊ณผ','์ผ์–ด์ผ๋ฌธํ•™๊ณผ','์ž„์ƒ๋ณ‘๋ฆฌํ•™๊ณผ','์ž๋™์ฐจ๊ณตํ•™๊ณผ','์ž‘๊ณก๊ณผ','์ž‘์—…์น˜๋ฃŒํ•™๊ณผ','์žฅ๋ก€์ง€๋„๊ณผ','์žฌ๋ฃŒ๊ณตํ•™๊ณผ',
234
+ '์žฌํ™œํ•™๊ณผ','์ „๊ธฐ์ „์ž๊ณตํ•™๊ณผ','์ •๋ณด๋ณดํ˜ธํ•™๊ณผ','์ •๋ณดํ†ต์‹ ํ•™๊ณผ','์ •์น˜์™ธ๊ตํ•™๊ณผ','์ œ๊ณผ์ œ๋นต๊ณผ','์ œ์–ด๊ณ„์ธก๊ณตํ•™๊ณผ','์ œ์ฒ ๊ธˆ์†๊ณผ','์กฐ๊ฒฝํ•™๊ณผ',
235
+ '์กฐ๋ฆฌํ•™๊ณผ','์กฐ์„ ๊ณตํ•™๊ณผ','์กฐํ˜•๋””์ž์ธํ•™๊ณผ','์ข…๊ต๊ต์œก๊ณผ','์ค‘์–ด์ค‘๋ฌธํ•™๊ณผ','์ง€๊ตฌ๊ณผํ•™๊ณผ','์ง€๋ฆฌํ•™๊ณผ','์ง€์งˆํ•™๊ณผ','์ฒœ๋ฌธํ•™๊ณผ','์ฒ ๋„๊ตํ†ต๊ณผ','์ฒ ํ•™๊ณผ',
236
+ '์ฒญ์†Œ๋…„์ง€๋„ํ•™๊ณผ','์ฒด์œก/์Šคํฌ์ธ ํ•™๊ณผ','์ฒด์œก๊ต์œก๊ณผ','์ดˆ๋“ฑ๊ต์œก๊ณผ','์ถ•์‚ฐํ•™๊ณผ','์น˜์œ„์ƒ๊ณผ','์ปจ๋ฒค์…˜์‚ฐ์—…๊ณผ','์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ','์ปดํ“จํ„ฐ๊ต์œก๊ณผ','ํƒœ๊ถŒ๋„๊ณผ','ํ† ๋ชฉ๊ณตํ•™๊ณผ','ํ†ต๊ณ„ํ•™๊ณผ','ํŠน์ˆ˜๊ต์œกํ•™๊ณผ','ํŠน์ˆ˜์–ธ์–ด๊ณผ','ํ‘ธ๋“œ์Šคํƒ€์ผ๋ง๊ณผ',
237
+ 'ํ•œ๋ฌธ๊ต์œก๊ณผ','ํ•œ์˜์˜ˆ๊ณผ','ํ•ญ๊ณต์„œ๋น„์Šคํ•™๊ณผ','ํ•ญ๊ณต์šดํ•ญ/์ •๋น„ํ•™๊ณผ','ํ•ญ๊ณต์šดํ•ญํ•™๊ณผ','ํ•ญํ•ดํ•™๊ณผ','ํ•ด์–‘๊ฒฝ์ฐฐํ•™๊ณผ','ํ•ด์–‘๊ณตํ•™๊ณผ','ํ–‰์ •ํ•™๊ณผ','ํ˜ธํ…”๊ฒฝ์˜๊ณผ','ํ™”ํ•™๊ณตํ•™๊ณผ','ํ™˜๊ฒฝ๊ณตํ•™๊ณผ','ํ™˜๊ฒฝ๋””์ž์ธํ•™๊ณผ'],
238
+ label = "ํ•™๊ณผ ์„ ํƒ")
239
+
240
+ # mbti ์„ ํƒ
241
+ mbti_key = gr.Dropdown(choices = ['INTJ', 'INTP', 'ENTJ', 'ENTP', 'INFJ', 'INFP', 'ENFJ', 'ENFP', 'ISTJ', 'ISFJ', 'ESTJ', 'ESFJ', 'ISTP', 'ISFP', 'ESTP', 'ESFP'],
242
+ label = "MBTI ์„ ํƒ")
243
+
244
+ # ์šฐ์„ธ์˜คํ–‰ ์„ ํƒ
245
+ woe_key = gr.Radio(choices = ['๋ชฉ', 'ํ™”', 'ํ† ', '๊ธˆ', '์ˆ˜'], label = "์šฐ์„ธ์˜คํ–‰ ์„ ํƒ")
246
+
247
+ demo = gr.Interface(
248
+ fn = resulting,
249
+ inputs = [user_major, mbti_key, woe_key],
250
+ outputs = gr.Textbox(label = "์ถ”์ฒœ๊ฒฐ๊ณผ", lines = 20)
251
+ )
252
+ demo.launch()