Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -8,7 +8,7 @@ from datetime import datetime
|
|
8 |
openai.api_key = os.getenv("OPENAI_API_KEY")
|
9 |
|
10 |
# LLM ํธ์ถ ํจ์
|
11 |
-
def call_api(content, system_message
|
12 |
response = openai.ChatCompletion.create(
|
13 |
model="gpt-4o-mini",
|
14 |
messages=[
|
@@ -40,7 +40,37 @@ def get_positive_reviews(df):
|
|
40 |
positive_reviews['์๋ฒ'] = positive_reviews.index
|
41 |
positive_output = "\n\n".join(positive_reviews.apply(
|
42 |
lambda x: f"{x['์๋ฒ']}. **{x['Review Date']} / {x['ID']} / {x['Option']}**\n\n{x['Review']}", axis=1))
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
return positive_output, analysis
|
45 |
|
46 |
# ๋ถ์ ์ ์ธ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐํํ๋ ํจ์
|
@@ -52,7 +82,37 @@ def get_negative_reviews(df):
|
|
52 |
negative_reviews['์๋ฒ'] = negative_reviews.index
|
53 |
negative_output = "\n\n".join(negative_reviews.apply(
|
54 |
lambda x: f"{x['์๋ฒ']}. **{x['Review Date']} / {x['ID']} / {x['Option']}**\n\n{x['Review']}", axis=1))
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
return negative_output, analysis
|
57 |
|
58 |
# ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๊ธ์ ๋ฐ ๋ถ์ ๋ฆฌ๋ทฐ๋ฅผ ์ถ์ถํ๋ ํจ์
|
@@ -72,11 +132,11 @@ def create_interface():
|
|
72 |
with gr.Column():
|
73 |
gr.Markdown("### ๊ธ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ (์ต๋ 20๊ฐ)")
|
74 |
positive_reviews_output = gr.Textbox(label="๊ธ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ", interactive=False, lines=20)
|
75 |
-
positive_analysis_output = gr.Textbox(label="๊ธ์ ๋ฆฌ๋ทฐ ๋ถ์ ๊ฒฐ๊ณผ", interactive=False, lines=
|
76 |
|
77 |
gr.Markdown("### ๋ถ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ (์ต๋ 30๊ฐ)")
|
78 |
negative_reviews_output = gr.Textbox(label="๋ถ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ", interactive=False, lines=30)
|
79 |
-
negative_analysis_output = gr.Textbox(label="๋ถ์ ๋ฆฌ๋ทฐ ๋ถ์ ๊ฒฐ๊ณผ", interactive=False, lines=
|
80 |
|
81 |
analyze_button.click(
|
82 |
fn=process_reviews,
|
|
|
8 |
openai.api_key = os.getenv("OPENAI_API_KEY")
|
9 |
|
10 |
# LLM ํธ์ถ ํจ์
|
11 |
+
def call_api(content, system_message, max_tokens=2000, temperature=0.7, top_p=0.9):
|
12 |
response = openai.ChatCompletion.create(
|
13 |
model="gpt-4o-mini",
|
14 |
messages=[
|
|
|
40 |
positive_reviews['์๋ฒ'] = positive_reviews.index
|
41 |
positive_output = "\n\n".join(positive_reviews.apply(
|
42 |
lambda x: f"{x['์๋ฒ']}. **{x['Review Date']} / {x['ID']} / {x['Option']}**\n\n{x['Review']}", axis=1))
|
43 |
+
system_message = """[์ค์ ๊ท์น]
|
44 |
+
1. ๋ฐ๋์ ํ๊ธ(ํ๊ตญ์ด)๋ก ์ถ๋ ฅํ๋ผ.
|
45 |
+
2. ๋๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๋น
๋ฐ์ดํฐ ๋ถ์๊ฐ์ด๋ค.
|
46 |
+
3. ๊ณ ๊ฐ์ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๊ธ์ ์ ์ธ ์๊ฒฌ์ ๋ฐ์ดํฐ๋ง ๋ถ์ํ๋ผ.
|
47 |
+
4. ๋ฐ๋์ ์ ๊ณต๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์์๋ง ๋ถ์ํ๋ผ.
|
48 |
+
5. ๋์ ์๊ฐ์ ํฌํจํ์ง ๋ง ๊ฒ.
|
49 |
+
[๋ถ์ ์กฐ๊ฑด]
|
50 |
+
1. ์ด 20๊ฐ์ ๋ฆฌ๋ทฐ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค.
|
51 |
+
2. ๊ฐ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์ ๋์งธ์ค ๋ถํฐ์ ์ค์ ๊ณ ๊ฐ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ํ๋ผ.
|
52 |
+
3. ๋ฐ๋์ ๊ธ์ ์ ์ธ ์๊ฒฌ๋ง์ ๋ถ์ํ๋ผ. ๋ถ์ ์ ์ธ ์๊ฒฌ์ ์ ์ธํ๋ผ.
|
53 |
+
4. ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ ๋ถ๋ถ, ๊ฐ์ฑ์ ์ธ ๋ถ๋ถ, ์ค์ ์ฌ์ฉ ์ธก๋ฉด์ ๋ถ๋ถ, ๋ฐฐ์ก์ ๋ถ๋ถ, ํ๊ฒ๋ณ ๋ถ๋ถ์ ๊ด์ ์ผ๋ก ๋ถ์ํ๋ผ.
|
54 |
+
5. 4๋ฒ์ ์กฐ๊ฑด์ ํฌํจ๋์ง ์๋ ๊ธ์ ์ ์ธ ๋ฆฌ๋ทฐ๋ฅผ ๋ณ๋๋ก ์ถ๋ ฅํ๋ผ.
|
55 |
+
6. ๋ง์ผํ
์ ์ธ ์์๋ก ์ฌ์ฉํ ์ ์๋ ๊ณ ๊ฐ์ ์ค์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ํ๋ผ.
|
56 |
+
[์ถ๋ ฅ ํํ ์กฐ๊ฑด]
|
57 |
+
1. ๊ฐ๊ฐ์ ์ ๋ชฉ ์์ '๐'์ด๋ชจ์ง๋ฅผ ์ถ๋ ฅํ๋ผ,'#', '##'์ ์ถ๋ ฅํ์ง ๋ง๊ฒ.
|
58 |
+
2. ๊ฐ์ฅ ๋ง์ง๋ง์ ์ข
ํฉ ์๊ฒฌ์ ์์ฑํ๋ผ, "๐์ข
ํฉ์๊ฒฌ"์ ์ ๋ชฉํํ๋ฅผ ์ฌ์ฉํ๋ผ.
|
59 |
+
[์ข
ํฉ์๊ฒฌ์ ์ถ๋ ฅ ์กฐ๊ฑด ์์]
|
60 |
+
('์ข
ํฉ์๊ฒฌ'์ด ์๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ด ์ถ๋ ฅ ์กฐ๊ฑด์ ๋ฐ์ํ์ง ๋ง ๊ฒ.
|
61 |
+
- ํญ๋ชฉ๋ณ ์ ๋ชฉ์ ์ ์ธํ๋ผ.
|
62 |
+
- ์ข
ํฉ์๊ฒฌ์๋ ํญ๋ชฉ๋ณ ์ ๋ชฉ์ ์ ์ธํ๊ณ ์์ ์ ๋ฌธ์ฅ์ผ๋ก ์์ฑํ๋ผ.
|
63 |
+
- ๋งค์ถ์ ๊ทน๋ํ ํ ์ ์๋ ๊ณ ๊ฐ์ ์ค์ ๋ฆฌ๋ทฐ ํฌ์ธํธ๋ฅผ ์ ์ํ๋ผ.
|
64 |
+
[SWOT๋ถ์ ์กฐ๊ฑด]
|
65 |
+
1. '์ข
ํฉ์๊ฒฌ' ๋ค์ ๋ด์ฉ์ผ๋ก SWOT๋ถ์ ์๊ฒฌ์ ์ถ๋ ฅํ๋ผ.
|
66 |
+
2. SWOT๋ถ์ ์ค '๊ฐ์ '์๊ฒฌ๊ณผ '๊ธฐํ'์ ์๊ฒฌ์ ์ถ๋ ฅํ๋ผ.
|
67 |
+
3. ๋ฐ๋์ '์ข
ํฉ์๊ฒฌ'์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ๋ผ.
|
68 |
+
4. ์ ๋ชฉ์ '๐น ๊ฐ์ ', '๐น ๊ธฐํ'์ผ๋ก ์ถ๋ ฅํ๋ผ.
|
69 |
+
[์ข
ํฉ์๊ฒฌ์ ์ถ๋ ฅ ์กฐ๊ฑด ๋]
|
70 |
+
3. ์ค์ ๊ณ ๊ฐ์ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์์ ์ฌ์ฉ๋ ๋จ์ด๋ฅผ ํฌํจํ๋ผ.
|
71 |
+
4. ๋์ ์๊ฐ์ ์์๋ก ๋ฃ์ง ๋ง ๊ฒ.
|
72 |
+
"""
|
73 |
+
analysis = call_api(positive_output, system_message=system_message)
|
74 |
return positive_output, analysis
|
75 |
|
76 |
# ๋ถ์ ์ ์ธ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐํํ๋ ํจ์
|
|
|
82 |
negative_reviews['์๋ฒ'] = negative_reviews.index
|
83 |
negative_output = "\n\n".join(negative_reviews.apply(
|
84 |
lambda x: f"{x['์๋ฒ']}. **{x['Review Date']} / {x['ID']} / {x['Option']}**\n\n{x['Review']}", axis=1))
|
85 |
+
system_message = """[์ค์ ๊ท์น]
|
86 |
+
1. ๋ฐ๋์ ํ๊ธ(ํ๊ตญ์ด)๋ก ์ถ๋ ฅํ๋ผ.
|
87 |
+
2. ๋๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๋น
๋ฐ์ดํฐ ๋ถ์๊ฐ์ด๋ค.
|
88 |
+
3. ๊ณ ๊ฐ์ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๋ถ์ ์ ์ธ ์๊ฒฌ์ ๋ฐ์ดํฐ๋ง ๋ถ์ํ๋ผ.
|
89 |
+
4. ๋ฐ๋์ ์ ๊ณต๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์์๋ง ๋ถ์ํ๋ผ.
|
90 |
+
5. ๋์ ์๊ฐ์ ํฌํจํ์ง ๋ง ๊ฒ.
|
91 |
+
[๋ถ์ ์กฐ๊ฑด]
|
92 |
+
1. ์ด 30๊ฐ์ ๋ฆฌ๋ทฐ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค.
|
93 |
+
2. ๊ฐ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์ ๋์งธ์ค ๋ถํฐ์ ์ค์ ๊ณ ๊ฐ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ํ๋ผ.
|
94 |
+
3. ๋ถ์ ์ ์ธ ์๊ฒฌ๋ง์ ๋ถ์ํ๋ผ.
|
95 |
+
4. ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ ๋ถ๋ถ, ๊ฐ์ฑ์ ์ธ ๋ถ๋ถ, ์ค์ ์ฌ์ฉ ์ธก๋ฉด์ ๋ถ๋ถ, ๋ฐฐ์ก์ ๋ถ๋ถ, ๊ณ ๊ฐ์ ๋ถ๋
ธ ๋ถ๋ถ์ ๊ด์ ์ผ๋ก ๋ถ์ํ๋ผ.
|
96 |
+
5. 4๋ฒ์ ์กฐ๊ฑด์ ํฌํจ๋์ง ์๋ ๋ถ์ ์ ์ธ ๋ฆฌ๋ทฐ๋ฅผ ๋ณ๋๋ก ์ถ๋ ฅํ๋ผ.
|
97 |
+
6. ๋ถ์ ์ ์ธ ๋ฆฌ๋ทฐ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก '๊ฐ์ ํ ์ '์ ์ถ๋ ฅํ๋ผ.
|
98 |
+
[์ถ๋ ฅ ํํ ์กฐ๊ฑด]
|
99 |
+
1. ๊ฐ๊ฐ์ ์ ๋ชฉ ์์ '๐'์ด๋ชจ์ง๋ฅผ ์ถ๋ ฅํ๋ผ,'#', '##'์ ์ถ๋ ฅํ์ง ๋ง๊ฒ.
|
100 |
+
2. ๊ฐ์ฅ ๋ง์ง๋ง์ '๊ฐ์ ํ ์ '์ ์ถ๋ ฅํ๋ผ("๐ข๊ฐ์ ํ ์ "์ ์ ๋ชฉํํ๋ฅผ ์ฌ์ฉํ๋ผ.)
|
101 |
+
[๊ฐ์ ํ ์ ์ ์ถ๋ ฅ ์กฐ๊ฑด ์์]
|
102 |
+
('๊ฐ์ ํ ์ '์ด ์๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ด ์ถ๋ ฅ ์กฐ๊ฑด์ ๋ฐ์ํ์ง ๋ง ๊ฒ.
|
103 |
+
- ํญ๋ชฉ๋ณ ์ ๋ชฉ์ ์ ์ธํ๋ผ.
|
104 |
+
- ์ฃผ์ ํญ๋ชฉ๋ณ๋ก ๊ฐ์ ํ ์ ์ ์ถ๋ ฅํ๋ผ.
|
105 |
+
- ์ ๋ฌธ์ ์ด๊ณ , ๋ถ์์ ์ด๋ฉฐ, ์ ์ํ๋ ํํ์ ๊ณต์ํ ์ดํฌ๋ฅผ ์ฌ์ฉํ๋ผ.(๋จ๋ตํ ํํ ๊ธ์ง)
|
106 |
+
[SWOT๋ถ์ ์กฐ๊ฑด]
|
107 |
+
1. '์ข
ํฉ์๊ฒฌ' ๋ค์ ๋ด์ฉ์ผ๋ก SWOT๋ถ์ ์๊ฒฌ์ ์ถ๋ ฅํ๋ผ.
|
108 |
+
2. SWOT๋ถ์ ์ค '์ฝ์ '์๊ฒฌ๊ณผ '์ํ'์ ์๊ฒฌ์ ์ถ๋ ฅํ๋ผ.
|
109 |
+
3. ๋ฐ๋์ '๊ฐ์ ํ ์ '์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ๋ผ.
|
110 |
+
4. ์ ๋ชฉ์ '๐ ์ฝ์ ', '๐ ์ํ'์ผ๋ก ์ถ๋ ฅํ๋ผ.
|
111 |
+
[๊ฐ์ ํ ์ ์ ์ถ๋ ฅ ์กฐ๊ฑด ๋]
|
112 |
+
3. ์ค์ ๊ณ ๊ฐ์ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์์ ์ฌ์ฉ๋ ๋จ์ด๋ฅผ ํฌํจํ๋ผ.
|
113 |
+
4. ๋์ ์๊ฐ์ ์์๋ก ๋ฃ์ง ๋ง ๊ฒ.
|
114 |
+
"""
|
115 |
+
analysis = call_api(negative_output, system_message=system_message)
|
116 |
return negative_output, analysis
|
117 |
|
118 |
# ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๊ธ์ ๋ฐ ๋ถ์ ๋ฆฌ๋ทฐ๋ฅผ ์ถ์ถํ๋ ํจ์
|
|
|
132 |
with gr.Column():
|
133 |
gr.Markdown("### ๊ธ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ (์ต๋ 20๊ฐ)")
|
134 |
positive_reviews_output = gr.Textbox(label="๊ธ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ", interactive=False, lines=20)
|
135 |
+
positive_analysis_output = gr.Textbox(label="๊ธ์ ๋ฆฌ๋ทฐ ๋ถ์ ๊ฒฐ๊ณผ", interactive=False, lines=10)
|
136 |
|
137 |
gr.Markdown("### ๋ถ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ (์ต๋ 30๊ฐ)")
|
138 |
negative_reviews_output = gr.Textbox(label="๋ถ์ ์ ์ธ ์ฃผ์ ๋ฆฌ๋ทฐ", interactive=False, lines=30)
|
139 |
+
negative_analysis_output = gr.Textbox(label="๋ถ์ ๋ฆฌ๋ทฐ ๋ถ์ ๊ฒฐ๊ณผ", interactive=False, lines=10)
|
140 |
|
141 |
analyze_button.click(
|
142 |
fn=process_reviews,
|