soojeongcrystal commited on
Commit
1ff04a5
ยท
verified ยท
1 Parent(s): bf2b975

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -8
app.py CHANGED
@@ -4,12 +4,21 @@ from sentence_transformers import SentenceTransformer
4
  from sklearn.metrics.pairwise import cosine_similarity
5
  import networkx as nx
6
  import matplotlib.pyplot as plt
 
 
7
 
8
  # Sentence-BERT ๋ชจ๋ธ ๋กœ๋“œ
9
  model = SentenceTransformer('all-MiniLM-L6-v2')
10
 
 
 
 
 
 
 
 
11
  # ์ง์› ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์„ ์ถ”์ฒœํ•˜๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜
12
- def analyze_data(employee_file, program_file):
13
  # ์ง์› ๋ฐ์ดํ„ฐ์™€ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
14
  employee_df = pd.read_csv(employee_file.name)
15
  program_df = pd.read_csv(program_file.name)
@@ -36,6 +45,9 @@ def analyze_data(employee_file, program_file):
36
  else:
37
  recommendation = f"์ง์› {employee['employee_name']}์—๊ฒŒ ์ ํ•ฉํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์—†์Šต๋‹ˆ๋‹ค."
38
 
 
 
 
39
  recommendations.append(recommendation)
40
 
41
  # ๊ฒฐ๊ณผ ํ…์ŠคํŠธ
@@ -64,22 +76,56 @@ def analyze_data(employee_file, program_file):
64
  return result_text, plt.gcf()
65
 
66
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
67
- def main(employee_file, program_file):
68
- return analyze_data(employee_file, program_file)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
  # Gradio ๋ธ”๋ก
71
  with gr.Blocks() as demo:
72
  with gr.Row():
73
  with gr.Column(scale=1):
74
  gr.Markdown("# HybridRAG ์‹œ์Šคํ…œ")
75
- gr.Markdown("๋‘ ๊ฐœ์˜ CSV ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์—ฌ ๋ถ„์„์„ ์ง„ํ–‰ํ•˜์„ธ์š”.")
76
 
77
- employee_file = gr.File(label="์ง์› ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ")
78
- program_file = gr.File(label="๊ต์œก ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ")
 
 
 
 
 
 
 
 
 
 
79
  analyze_button = gr.Button("๋ถ„์„ ์‹œ์ž‘")
80
  output_text = gr.Textbox(label="๋ถ„์„ ๊ฒฐ๊ณผ")
81
 
82
- analyze_button.click(main, inputs=[employee_file, program_file], outputs=[output_text])
83
 
84
  with gr.Column(scale=2):
85
  gr.Markdown("### ์ •๋ณด ํŒจ๋„")
@@ -89,7 +135,7 @@ with gr.Blocks() as demo:
89
  chart_output = gr.Plot(label="์‹œ๊ฐํ™” ์ฐจํŠธ")
90
 
91
  # ๋ถ„์„ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ฐจํŠธ ์—…๋ฐ์ดํŠธ
92
- analyze_button.click(main, inputs=[employee_file, program_file], outputs=[output_text, chart_output])
93
 
94
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์‹คํ–‰
95
  demo.launch()
 
4
  from sklearn.metrics.pairwise import cosine_similarity
5
  import networkx as nx
6
  import matplotlib.pyplot as plt
7
+ import csv
8
+ import datetime
9
 
10
  # Sentence-BERT ๋ชจ๋ธ ๋กœ๋“œ
11
  model = SentenceTransformer('all-MiniLM-L6-v2')
12
 
13
+ # ์ถ”์ฒœ ๊ฒฐ๊ณผ์™€ ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋กํ•˜๋Š” ํ•จ์ˆ˜
14
+ def log_recommendation(employee_name, recommended_programs, feedback=None):
15
+ with open('recommendation_log.csv', mode='a', newline='') as file:
16
+ writer = csv.writer(file)
17
+ timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
18
+ writer.writerow([timestamp, employee_name, recommended_programs, feedback])
19
+
20
  # ์ง์› ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์„ ์ถ”์ฒœํ•˜๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜
21
+ def analyze_data(employee_file, program_file, feedback=None):
22
  # ์ง์› ๋ฐ์ดํ„ฐ์™€ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
23
  employee_df = pd.read_csv(employee_file.name)
24
  program_df = pd.read_csv(program_file.name)
 
45
  else:
46
  recommendation = f"์ง์› {employee['employee_name']}์—๊ฒŒ ์ ํ•ฉํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์—†์Šต๋‹ˆ๋‹ค."
47
 
48
+ # ํ”ผ๋“œ๋ฐฑ ๋กœ๊ทธ ๊ธฐ๋ก
49
+ log_recommendation(employee['employee_name'], recommended_programs, feedback)
50
+
51
  recommendations.append(recommendation)
52
 
53
  # ๊ฒฐ๊ณผ ํ…์ŠคํŠธ
 
76
  return result_text, plt.gcf()
77
 
78
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
79
+ def main(employee_file, program_file, feedback):
80
+ return analyze_data(employee_file, program_file, feedback)
81
+
82
+ # ์˜ˆ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜
83
+ def show_example_data():
84
+ employee_example = pd.DataFrame({
85
+ 'employee_id': ['001', '002'],
86
+ 'employee_name': ['ํ™๊ธธ๋™', '๊น€์˜ํฌ'],
87
+ 'current_role': ['๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€', '๋งˆ์ผ€ํŒ… ๋งค๋‹ˆ์ €'],
88
+ 'current_skills': ['Python, SQL, ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”', '๋งˆ์ผ€ํŒ… ์ „๋žต, ๋ฐ์ดํ„ฐ ๋ถ„์„'],
89
+ 'past_training': ['Python ๊ธฐ๋ณธ ๊ณผ์ •, SQL ์ค‘๊ธ‰', '๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐ์ดˆ ๊ณผ์ •'],
90
+ 'performance_review': ['์„ฑ๊ณผ ์šฐ์ˆ˜', '์„ฑ๊ณผ ์ข‹์Œ'],
91
+ 'learning_goal': ['๋จธ์‹ ๋Ÿฌ๋‹ ๊ธฐ์ดˆ ํ•™์Šต', '๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐ์ˆ  ํ•™์Šต']
92
+ })
93
+
94
+ program_example = pd.DataFrame({
95
+ 'program_id': ['101', '102'],
96
+ 'program_name': ['Python ๊ณ ๊ธ‰ ๊ณผ์ •', '๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ์‹ฌํ™” ๊ณผ์ •'],
97
+ 'learning_objectives': ['Python ๊ณ ๊ธ‰ ๊ธฐ์ˆ  ์Šต๋“', '๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ ์‚ฌ์šฉ๋ฒ• ์ˆ™์ง€'],
98
+ 'skills_acquired': ['Python ๊ณ ๊ธ‰, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ', 'Tableau, ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ'],
99
+ 'prerequisites': ['Python ๊ธฐ์ดˆ', '๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๊ธฐ์ดˆ'],
100
+ 'duration': ['4์ฃผ', '2์ฃผ'],
101
+ 'learning_outcome': ['๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋Šฅ๋ ฅ', '์‹œ๊ฐํ™” ๊ฒฐ๊ณผ๋ฌผ ์ž‘์„ฑ ๋Šฅ๋ ฅ']
102
+ })
103
+
104
+ return employee_example, program_example
105
 
106
  # Gradio ๋ธ”๋ก
107
  with gr.Blocks() as demo:
108
  with gr.Row():
109
  with gr.Column(scale=1):
110
  gr.Markdown("# HybridRAG ์‹œ์Šคํ…œ")
111
+ gr.Markdown("๋‘ ๊ฐœ์˜ CSV ํŒŒ์ผ์„ ์ขŒ์ธก ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ์—…๋กœ๋“œํ•˜์—ฌ ๋ถ„์„์„ ์ง„ํ–‰ํ•˜์„ธ์š”.")
112
 
113
+ # ์‚ฌ์ด๋“œ๋ฐ”์— ํŒŒ์ผ ์—…๋กœ๋“œ ์˜ต์…˜ ์ถ”๊ฐ€
114
+ with gr.Sidebar():
115
+ employee_file = gr.File(label="์ง์› ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ")
116
+ program_file = gr.File(label="๊ต์œก ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ")
117
+ feedback_input = gr.Radio(choices=["๋งŒ์กฑ", "๋ถˆ๋งŒ์กฑ"], label="์ถ”์ฒœ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ")
118
+
119
+ # ์˜ˆ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ์ œ๊ณต
120
+ example_button = gr.Button("์˜ˆ์‹œ ๋ฐ์ดํ„ฐ ๋ณด๊ธฐ")
121
+ employee_example_output = gr.DataFrame(label="์ง์› ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ")
122
+ program_example_output = gr.DataFrame(label="๊ต์œก ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ")
123
+ example_button.click(show_example_data, outputs=[employee_example_output, program_example_output])
124
+
125
  analyze_button = gr.Button("๋ถ„์„ ์‹œ์ž‘")
126
  output_text = gr.Textbox(label="๋ถ„์„ ๊ฒฐ๊ณผ")
127
 
128
+ analyze_button.click(main, inputs=[employee_file, program_file, feedback_input], outputs=[output_text])
129
 
130
  with gr.Column(scale=2):
131
  gr.Markdown("### ์ •๋ณด ํŒจ๋„")
 
135
  chart_output = gr.Plot(label="์‹œ๊ฐํ™” ์ฐจํŠธ")
136
 
137
  # ๋ถ„์„ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ฐจํŠธ ์—…๋ฐ์ดํŠธ
138
+ analyze_button.click(main, inputs=[employee_file, program_file, feedback_input], outputs=[output_text, chart_output])
139
 
140
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์‹คํ–‰
141
  demo.launch()