Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
| 1 |
-
# app.py
|
| 2 |
-
# Colab ์ ์ฉ ์ฝ๋ ์ ๊ฑฐ ์ต์ ์ ๋ฆฌํ (์๋ณธ ๋ก์ง ์ ์ง)
|
| 3 |
import os
|
| 4 |
import ast
|
| 5 |
import pandas as pd
|
|
@@ -11,8 +9,8 @@ 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๋ ์์ ๋ก์ด ์ํผ์ผ๋ก ์ธํฅ์ ์ด๊ณ ์์งํ๋ฉฐ ๊ฐ๋ฐฉ์ ์ธ ์ฑ๊ฒฉ์
๋๋ค. ํ๊ธฐ์ฐจ๊ณ ๋๊ด์ ์ธ ํ๋๋ก ์ด์๊ฐ๋ฉฐ ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ฐ์ ์ ์ผ๋ก ๊น๊ณ ์๋ฏธ ์๋ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ ์ถ๊ตฌํฉ๋๋ค. ๋ํ ์์๋ ฅ๊ณผ ์ฐฝ์๋ ฅ์ด ํ๋ถํ๊ณ ํธ๊ธฐ์ฌ์ด ๋ง์ ์ฑ๊ฒฉ์
๋๋ค. ์๊ธฐ ์ฑ์ฐฐ์ ์ธ ๋ชจ์ต์ ๋ณด์ผ ๋๊ฐ ์์ผ๋ฉฐ ๊ธ์ ์ ์ธ ์๋์ง๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋๋ ์ง๋์์ ์ญํ ์ ๋งก์ ๋๊ฐ ๋ง์ต๋๋ค.",
|
|
@@ -40,12 +38,6 @@ woe_dict = {
|
|
| 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 filter_by_major(df, user_major, major_col = "๊ด๋ จํ๊ณผ"):
|
| 50 |
def to_list(x):
|
| 51 |
if isinstance(x, str):
|
|
@@ -64,11 +56,12 @@ def filter_by_major(df, user_major, major_col = "๊ด๋ จํ๊ณผ"):
|
|
| 64 |
print(f"โป ํํฐ๋ง๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.")
|
| 65 |
return filtered_df
|
| 66 |
|
|
|
|
|
|
|
| 67 |
def recommend_jobs(mbti_key,
|
| 68 |
woe_key,
|
| 69 |
jobs_df,
|
| 70 |
top_n = 3,
|
| 71 |
-
model_name = "jhgan/ko-sbert-multitask",
|
| 72 |
job_name_col = "์ง์
๋ช
",
|
| 73 |
job_sent_col = "ํฅ๋ฏธ์ ์ฑ",
|
| 74 |
job_duty_col = "์ฃผ์์
๋ฌด",
|
|
@@ -79,7 +72,7 @@ def recommend_jobs(mbti_key,
|
|
| 79 |
mbti_text = mbti_dict.get(mbti_key.upper(), mbti_key)
|
| 80 |
woe_text = woe_dict.get(woe_key, woe_key)
|
| 81 |
|
| 82 |
-
model =
|
| 83 |
|
| 84 |
# mbti, ์คํ ํ
์คํธ ์๋ฒ ๋ฉ
|
| 85 |
mbti_emb = model.encode(str(mbti_text), convert_to_tensor = True)
|
|
@@ -124,19 +117,20 @@ def recommend_jobs(mbti_key,
|
|
| 124 |
|
| 125 |
return results
|
| 126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
def generate_recommendation_reason(job_name, job_duty, mbti_key, woe_key, similarity_score):
|
| 128 |
"""
|
| 129 |
OpenAI GPT๋ฅผ ์ฌ์ฉํ์ฌ ์ง์
์ถ์ฒ ์ด์ ๋ฅผ ์์ฑํฉ๋๋ค.
|
| 130 |
"""
|
| 131 |
-
client = OpenAI(
|
| 132 |
-
api_key=os.environ.get("OPENAI_API_KEY")
|
| 133 |
-
)
|
| 134 |
|
| 135 |
# ์ฌ์ฉ์ ์ฑ๊ฒฉ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
|
| 136 |
mbti_desc = mbti_dict.get(mbti_key.upper(), "")
|
| 137 |
woe_desc = woe_dict.get(woe_key, "")
|
| 138 |
|
| 139 |
-
# ํ๋กฌํํธ ์์ฑ
|
| 140 |
prompt = f"""๋น์ ์ ์ง๋ก ์๋ด ์ ๋ฌธ๊ฐ์
๋๋ค. ์๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ด ์ง์
์ ์ถ์ฒํ๋ ์ด์ ๋ฅผ 2-3๋ฌธ์ฅ์ผ๋ก ๊ฐ๋จ๋ช
๋ฃํ๊ฒ ์ค๋ช
ํด์ฃผ์ธ์.
|
| 141 |
|
| 142 |
**์ฌ์ฉ์ ์ ๋ณด:**
|
|
|
|
|
|
|
|
|
|
| 1 |
import os
|
| 2 |
import ast
|
| 3 |
import pandas as pd
|
|
|
|
| 9 |
import gradio as gr
|
| 10 |
|
| 11 |
DATA_PATH = "data.csv"
|
| 12 |
+
df = pd.read_csv(DATA_PATH)
|
| 13 |
|
|
|
|
| 14 |
mbti_dict = {
|
| 15 |
"ENFJ": "ENFJ๋ ์ฌ๋ ค ๊น๊ณ ์ด์์ฃผ์์ ์ธ ์ฑํฅ์ผ๋ก ๊ธ์ ์ ์ธ ์ํฅ๋ ฅ์ ๋ฐํํ๋ ค ์ต์ ์ ๋คํ๊ณ ๋ค๋ฅธ ์ฌ๋์ ๋๋ ์ผ์ ์ฆ๊ฑฐ์๊ณผ ๋ง์กฑ๊ฐ์ ๋๋๋๋ค. ์ธ์ฌํจ๊ณผ ํต์ฐฐ๋ ฅ์ผ๋ก ๋ค๋ฅธ ์ฌ๋์ ๊ณต๊ฐ์ ์ด๋์ด๋
๋๋ค. ํ์ ์ ์ธ ์ดํ์ฃผ์์์ด๋ฉฐ ๋ฆฌ๋์ญ ๊ธฐ์ ์ด ๊ฐํ์ฌ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋๋ ๋ฅ๋ ฅ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ ์ด๊ณ ํ์ ์ ์ผ๋ก ๋จ์ ๋ฐฐ๋ คํ๊ณ ๋๋ฃ์๊ฒ ์กฐ์ธ์ ์ฃผ๊ธฐ๋ ํฉ๋๋ค.",
|
| 16 |
"ENFP": "ENFP๋ ์์ ๋ก์ด ์ํผ์ผ๋ก ์ธํฅ์ ์ด๊ณ ์์งํ๋ฉฐ ๊ฐ๋ฐฉ์ ์ธ ์ฑ๊ฒฉ์
๋๋ค. ํ๊ธฐ์ฐจ๊ณ ๋๊ด์ ์ธ ํ๋๋ก ์ด์๊ฐ๋ฉฐ ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ฐ์ ์ ์ผ๋ก ๊น๊ณ ์๋ฏธ ์๋ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ ์ถ๊ตฌํฉ๋๋ค. ๋ํ ์์๋ ฅ๊ณผ ์ฐฝ์๋ ฅ์ด ํ๋ถํ๊ณ ํธ๊ธฐ์ฌ์ด ๋ง์ ์ฑ๊ฒฉ์
๋๋ค. ์๊ธฐ ์ฑ์ฐฐ์ ์ธ ๋ชจ์ต์ ๋ณด์ผ ๋๊ฐ ์์ผ๋ฉฐ ๊ธ์ ์ ์ธ ์๋์ง๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋๋ ์ง๋์์ ์ญํ ์ ๋งก์ ๋๊ฐ ๋ง์ต๋๋ค.",
|
|
|
|
| 38 |
'์': ("์(ๆฐด) ๊ธฐ์ด์ด ๊ฐํ๋ฉด ์ํฉ์ ํ๋ฆ๊ณผ ์ฌ๋๋ค์ ๊ฐ์ ์ ์ ์ฝ๋๋ค. ๊น์ด ์๊ฒ ๊ณ ๋ฏผํ๊ณ ํ๊ตฌํ๋ ์ฑํฅ์ด ์๋ค. ์กฐ์ฉํ ๊ด์ฐฐํ๊ณ ๋ถ์ํ๊ฑฐ๋, ์ฌ๋๋ค์ ๋ง์์ ์ดํดํ๋ ์ญํ ์ ์ ์ด์ธ๋ฆฐ๋ค.")
|
| 39 |
}
|
| 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
def filter_by_major(df, user_major, major_col = "๊ด๋ จํ๊ณผ"):
|
| 42 |
def to_list(x):
|
| 43 |
if isinstance(x, str):
|
|
|
|
| 56 |
print(f"โป ํํฐ๋ง๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.")
|
| 57 |
return filtered_df
|
| 58 |
|
| 59 |
+
MODEL = SentenceTransformer("jhgan/ko-sbert-multitask", device="cpu")
|
| 60 |
+
|
| 61 |
def recommend_jobs(mbti_key,
|
| 62 |
woe_key,
|
| 63 |
jobs_df,
|
| 64 |
top_n = 3,
|
|
|
|
| 65 |
job_name_col = "์ง์
๋ช
",
|
| 66 |
job_sent_col = "ํฅ๋ฏธ์ ์ฑ",
|
| 67 |
job_duty_col = "์ฃผ์์
๋ฌด",
|
|
|
|
| 72 |
mbti_text = mbti_dict.get(mbti_key.upper(), mbti_key)
|
| 73 |
woe_text = woe_dict.get(woe_key, woe_key)
|
| 74 |
|
| 75 |
+
model = MODEL
|
| 76 |
|
| 77 |
# mbti, ์คํ ํ
์คํธ ์๋ฒ ๋ฉ
|
| 78 |
mbti_emb = model.encode(str(mbti_text), convert_to_tensor = True)
|
|
|
|
| 117 |
|
| 118 |
return results
|
| 119 |
|
| 120 |
+
client = OpenAI(
|
| 121 |
+
api_key=os.environ.get("OPENAI_API_KEY")
|
| 122 |
+
)
|
| 123 |
+
|
| 124 |
def generate_recommendation_reason(job_name, job_duty, mbti_key, woe_key, similarity_score):
|
| 125 |
"""
|
| 126 |
OpenAI GPT๋ฅผ ์ฌ์ฉํ์ฌ ์ง์
์ถ์ฒ ์ด์ ๋ฅผ ์์ฑํฉ๋๋ค.
|
| 127 |
"""
|
|
|
|
|
|
|
|
|
|
| 128 |
|
| 129 |
# ์ฌ์ฉ์ ์ฑ๊ฒฉ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
|
| 130 |
mbti_desc = mbti_dict.get(mbti_key.upper(), "")
|
| 131 |
woe_desc = woe_dict.get(woe_key, "")
|
| 132 |
|
| 133 |
+
# ํ๋กฌํํธ ์์ฑ
|
| 134 |
prompt = f"""๋น์ ์ ์ง๋ก ์๋ด ์ ๋ฌธ๊ฐ์
๋๋ค. ์๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ด ์ง์
์ ์ถ์ฒํ๋ ์ด์ ๋ฅผ 2-3๋ฌธ์ฅ์ผ๋ก ๊ฐ๋จ๋ช
๋ฃํ๊ฒ ์ค๋ช
ํด์ฃผ์ธ์.
|
| 135 |
|
| 136 |
**์ฌ์ฉ์ ์ ๋ณด:**
|