Spaces:
Runtime error
Runtime error
Duplicate from JUNGU/keyword
Browse filesCo-authored-by: HAN JUNGU <JUNGU@users.noreply.huggingface.co>
- .gitattributes +35 -0
- README.md +14 -0
- app.py +265 -0
- requirements.txt +4 -0
.gitattributes
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: Keyword
|
3 |
+
emoji: ๐ฅ
|
4 |
+
colorFrom: purple
|
5 |
+
colorTo: indigo
|
6 |
+
sdk: streamlit
|
7 |
+
sdk_version: 1.26.0
|
8 |
+
app_file: app.py
|
9 |
+
pinned: false
|
10 |
+
license: openrail
|
11 |
+
duplicated_from: JUNGU/keyword
|
12 |
+
---
|
13 |
+
|
14 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.py
ADDED
@@ -0,0 +1,265 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from annotated_text import annotated_text
|
2 |
+
import streamlit as st
|
3 |
+
import openai
|
4 |
+
import os
|
5 |
+
|
6 |
+
# OpenAI API ์ค์ (ํ๊ฒฝ ๋ณ์์์ ์ฝ์ด์ด)
|
7 |
+
openai.api_key = os.getenv("OPENAI_API_KEY") # ์ค์ ์ฝ๋์์ ์ฃผ์ ํด์
|
8 |
+
st.set_page_config(layout="wide")
|
9 |
+
|
10 |
+
|
11 |
+
## ํฌ์ธํธ ๋ถ๋ถ ์ถ๊ฐ
|
12 |
+
if 'points' not in st.session_state:
|
13 |
+
st.session_state.points = 3
|
14 |
+
if 'history' not in st.session_state:
|
15 |
+
st.session_state.history = []
|
16 |
+
|
17 |
+
def update_points(value):
|
18 |
+
""" ํฌ์ธํธ ์
๋ฐ์ดํธ """
|
19 |
+
st.session_state.points += value
|
20 |
+
# display_points() # ํฌ์ธํธ๋ฅผ ์ค์๊ฐ์ผ๋ก ์
๋ฐ์ดํธ ํ๊ธฐ ์ํด
|
21 |
+
|
22 |
+
def display_points():
|
23 |
+
""" ํฌ์ธํธ ํ์ """
|
24 |
+
st.sidebar.header(f"Current Points: {st.session_state.points}")
|
25 |
+
|
26 |
+
def display_markdown_table():
|
27 |
+
"""์ง๊ธ๊น์ง ์ฌ์ฉํ ๊ธฐ๋ฅ๊ณผ ํฌ์ธํธ๋ฅผ ํ์ํ๋ ํ์คํ ๋ฆฌ ํจ์, ๊ธฐ๋ฅ์ ๋๋ฅธ ์์์ ํฌ์ธํธ ๋ณํ์ ํ์ฌ ํฌ์ธํธ๋ฅผ ํ๋ก ์ ๋ฆฌ"""
|
28 |
+
markdown_table = """| ์์ | ์ ํํ ๊ธฐ๋ฅ | ํฌ์ธํธ ๋ณํ | ํ์ฌ ํฌ์ธํธ |
|
29 |
+
| --- | --- | --- | --- |
|
30 |
+
"""
|
31 |
+
for i, step in enumerate(st.session_state.history):
|
32 |
+
markdown_table += f"| {i+1} | {step[0]} | {step[1]} | {step[2]} |\n"
|
33 |
+
st.sidebar.markdown(markdown_table)
|
34 |
+
|
35 |
+
|
36 |
+
|
37 |
+
##๊ธฐ๋ฅ์ ํจ์๋ก ๋๋์ด์ ๊ตฌํ
|
38 |
+
col, _ = st.columns(2)
|
39 |
+
|
40 |
+
def display_passage(col):
|
41 |
+
st.header("์ง๋ฌธ")
|
42 |
+
global text_container
|
43 |
+
text_container = st.container() # ์ถ๊ฐ๋ ์ฝ๋
|
44 |
+
# ๋ฏธ๋ฆฌ ๊ณต๊ฐ ํ๋ณด
|
45 |
+
global text_placeholder
|
46 |
+
text_placeholder = text_container.empty()
|
47 |
+
global user_text
|
48 |
+
user_text = """๋ฏผ์ฃผ์ฃผ์ ์ฌํ๋ ๊ตญ๋ฏผ์ด ์ ์น์ ์ฐธ์ฌํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ค. ๊ทธ๋ฌํ ๊ถ๋ฆฌ๋ฅผ ์ฐธ์ ๊ถ์ด๋ผ ํ๋๋ฐ, ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก โ์ ๊ฑฐโ๋ก ์คํ๋๋ค. ์ ๊ฑฐ๋ ์ฌํ ์ง๋จ์ ๋ํ์๋ ๊ณต์ง์๋ฅผ ์ ์ถํ์ฌ ๊ทธ๋ค์๊ฒ ๋ํ์ฑ์ ๋ถ์ฌํ๋ ํ์์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋์ ํฌํ์จ์ ๋ฏผ์ฃผ์ฃผ์์ ์ ๋น์ฑ ํ๋ณด์ ๊น์ ๊ด๋ จ์ด ์๋ค.<br><br>
|
49 |
+
์ ๊ฑฐ ํฌํ ์ ๋์๋ ํฌํ๊ถ ํ์ฌ๋ฅผ ํฌํ์์ ์์ ์์ฌ์ ๋งก๊ธฐ๋ โ์์ ํฌํ์ โ์ ํฌํ๊ถ ํ์ฌ๋ฅผ ๊ตญ๋ฏผ์ ์๋ฌด๋ก ๊ฐ์ฃผํ๊ณ ์ ๋นํ ์ฌ์ ์์ด ๊ธฐ๊ถํ๋ฉด ๋ฒ์ ์ ์ฌ๋ฅผ ๊ฐํ๋ โ์๋ฌด ํฌํ์ โ๊ฐ ์๋ค. ์ฐ๋ฆฌ๋๋ผ๋ ์์ ํฌํ์ ๋ฅผ ์ฑํํ๊ณ ์๋๋ฐ, ์ต๊ทผ ์น๋ฅธ ์ ๊ฑฐ์ ํ๊ท ํฌํ์จ์ด 50ํผ์ผํธ๋๋ก ๋ํ๋ฌ๋ค. ๊ฒฝ์ ๊ฐ๋ฐ ํ๋ ฅ ๊ธฐ๊ตฌ(OECD) ํ์๊ตญ ํ๊ท ์ด 70ํผ์ผํธ๋์ธ ๊ฒ์ ์๊ฐํ๋ฉด ๋งค์ฐ ๋ฎ์ ์์น๋ผ ํ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ด ์ง์๋์ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํด์ผ ํ๋ค๋ ์๊ฒฌ์ด ์ ์๋์๊ณ , ์์ ํฌํ์ ๊ฐ ๋ฏผ์ฃผ์ฃผ์์ ์์น์ ๋ง์ผ๋ฏ๋ก ์ด๋ฅผ ์ ์งํด์ผ ํ๋ค๋ ์๊ฒฌ๊ณผ ๋๋ฆฝํ๊ณ ์๋ค.<br><br>
|
50 |
+
์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ์๋ ์ธก์ ๋ฎ์ ํฌํ์จ๋ก ํฌํ ๊ฒฐ๊ณผ์ ์ ๋น์ฑ์ ํ๋ณดํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ฌ๊ฐํ๋ค๊ณ ์ฃผ์ฅํ๋ค. ๋ ์๋ฌด ํฌํ์ ์ ๊ฐ์ ์ฑ๊ณผ ๋ฒ์ ์ ์ฌ๊ฐ ํฌํ์จ์ ๋์ด๋ฏ๋ก ํฌํ์จ์ด ๋ฎ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตญ๋ฏผ ๋๋ถ๋ถ์ด ํฌํ์ ์ฐธ์ฌํ๊ฒ ๋๋ฉด ์ ์น์ธ๋ค์ด ๋ชจ๋ ๊ณ์ธต์ ์ง์ง๋ฅผ ๋ฐ๊ธฐ ์ํด ์ ์ฑ
๊ฒฝ์๋ ฅ์ ๋์ด๋ ค ํ ๊ฒ์ด๋ฏ๋ก ์ ์น ์์ธ ๊ณ์ธต์ ๋์ฑ ๊ด์ฌ์ ์๋ ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค.<br><br>
|
51 |
+
๋ฐ๋ฉด ์๋ฌด ํฌํ์ ์ ๋ฐ๋ํ๋ ์ธก์ ํ์ฌ ์ฐ๋ฆฌ๋๋ผ์ ํฌํ์จ์ด ์ ์น ์ง๋์๋ค์ ๋ํ์ฑ์ ํผ์ํ ๋งํผ ์ฌ๊ฐํ ์ํฉ์ ์๋๋ผ๊ณ ์ฃผ์ฅํ๋ค. ๋ ํฌํ์จ์ ๋์ด๋ ๊ฒ๋ณด๋ค ๊ตญ๋ฏผ์ ์ ๋ขฐ๋ฅผ ํ๋ณตํ๋ ๊ฒ์ด ๋ ์ค์ํ๊ณ , ์๋ฏผ ๊ต์ก์ด๋ ๋ชจ์ ํฌํ ๊ต์ก ํ๋ก๊ทธ๋จ์ผ๋ก๋ ํฌํ์จ ์์น์ ๊ธฐ๋ํ ์ ์๋ค๋ฉฐ ์๋ฌด ํฌํ์ ์ ๋์
๋ง์ด ํฌํ์จ์ด๋ ์ ์น์ ๊ด์ฌ์ ๋์ด๋ ํด๊ฒฐ ๋ฐฉ์์ ์๋๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ๋ฉด, ์ ์ถ๋ ์ ์น์ธ๋ค์ด ๋์ ํฌํ์จ์ ํ๊ณ๋ก ์ํ๋ฌด์ธ์ ํ๋๋ฅผ ๊ฐ๋ ๋ถ์์ฉ์ด ์๊ธด๋ค๋ ๊ฐ ํ๋ณด์๋ฅผ ์ ๋ชจ๋ฅด๋ ์ํ์์ ํฌํํ๋ ์ผ์ด ๋ฐ์ํ์ฌ ๊ตญ๋ฏผ์ ๋ป์ด ์คํ๋ ค ์๊ณก๋ ์ ์๋ค๋ฉฐ ์ฐ๋ ค์ ๋ชฉ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ค.<br><br>
|
52 |
+
"""
|
53 |
+
text_placeholder.write(user_text, unsafe_allow_html=True)
|
54 |
+
#์ ์ธํ ๋ณ์ ๋ค๋ฅธ ํจ์์์ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด return
|
55 |
+
return text_placeholder, text_container, user_text
|
56 |
+
|
57 |
+
|
58 |
+
def display_summary(col):
|
59 |
+
st.header("์์ฝ ๊ฒฐ๊ณผ")
|
60 |
+
global user_summary
|
61 |
+
user_summary = st.text_area("์์ฝ๊ฒฐ๊ณผ๋ฅผ ์ ์ถํ์ธ์.")
|
62 |
+
|
63 |
+
cols = st.columns(2)
|
64 |
+
with cols[0]:
|
65 |
+
btn_submit = st.button("์ ์ถ")
|
66 |
+
if btn_submit:
|
67 |
+
#๊ตฌ๊ธ ๋๋ผ์ด๋ธ api ์ด์ฉํ์ฌ ์
๋ก๋
|
68 |
+
st.write("์ ์ถ ๋์์ต๋๋ค.")
|
69 |
+
pass
|
70 |
+
|
71 |
+
with cols[1]:
|
72 |
+
btn_score = st.button("์ฑ์ ํ๊ธฐ")
|
73 |
+
if btn_score and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ
|
74 |
+
update_points(1) # ํฌ์ธํธ ์ฆ๊ฐ
|
75 |
+
st.session_state.history.append(["์ฑ์ ํ๊ธฐ", -1, st.session_state.points])
|
76 |
+
#๋ฃจ๋ธ๋ฆญ์ ์ํ ์ฑ์
|
77 |
+
lubric = """์ฑ์ ๊ธฐ์ค ์: ๋ฌธ์ฅ์ ์ฃผ์ ๋ฅผ ํ์
ํ๊ณ , ์ฃผ์ ๋ด์ฉ์ ํ์
ํ ์ ์๋ค. ์ค: ๋ฌธ์ฅ์ ์ฃผ์ ๋ฅผ ํ์
ํ ์ ์๋ค. ํ: ๋ฌธ์ฅ์ ์ฃผ์ ๋ฅผ ํ์
ํ ์ ์๋ค."""
|
78 |
+
#๋ฃจ๋ธ๋ฆญ ๊ธฐ์ค์ ์ด์ฉํด์ ์
๋ ฅ์นธ์ ์
๋ ฅํ ๋ด์ฉ์ ์ฑ์ ํ๋ ์์ด๋ก ํ๋กฌํํธ
|
79 |
+
explanation_task = f"{lubric}์ ๊ธฐ์ค์ผ๋ก {user_summary}์ ๋ด์ฉ์ ์ฑ์ ํด์ฃผ์ธ์. ์ฑ์ ๊ธฐ์ค์ ๊ณต๊ฐํ์ง ๋ง๊ณ ์, ์ค,ํ๋ก ๋๋๊ณ ๊ฐ๋จํ ์ด์ ๋ฅผ ์๋ ค์ฃผ์ธ์."
|
80 |
+
messages = [
|
81 |
+
{"role": "system", "content": "You are a helpful assistant. use only korean"},
|
82 |
+
{"role": "user", "content": explanation_task}
|
83 |
+
]
|
84 |
+
|
85 |
+
response = openai.ChatCompletion.create(
|
86 |
+
model="gpt-3.5-turbo-16k",
|
87 |
+
messages=messages,
|
88 |
+
temperature=0.1,
|
89 |
+
max_tokens=2500
|
90 |
+
)
|
91 |
+
|
92 |
+
explanation = response['choices'][0]['message']['content']
|
93 |
+
st.write(f"์ฑ์ ํ๊ธฐ: {explanation}")
|
94 |
+
pass
|
95 |
+
else:
|
96 |
+
if st.session_state.points == 0:
|
97 |
+
#ํฌ์ธํธ๊ฐ ์์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ๊ตฌ ์ถ๊ฐ
|
98 |
+
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ์ฑ์ ํ๊ธฐ๋ฅผ ํ ์ ์์ต๋๋ค.")
|
99 |
+
pass
|
100 |
+
|
101 |
+
def display_input_btns(col):
|
102 |
+
st.header("์ธ๊ณต์ง๋ฅ ์ฌ์ฉํ๊ธฐ")
|
103 |
+
global user_input
|
104 |
+
user_input = st.text_area("๋ด์ฉ์ ๋ฃ๊ณ ๋ฒํผ์ ๋๋ฌ์ฃผ์ธ์:", "์ถ๊ฐ ์ค๋ช
์ด ํ์ํ๊ฑฐ๋ ๋ค์ ์ฐ๊ณ ์ถ์ ๋ด์ฉ์ ์
๋ ฅํ์ธ์.")
|
105 |
+
|
106 |
+
# ๋ฒํผ row
|
107 |
+
cols = st.columns(4)
|
108 |
+
with cols[0]:
|
109 |
+
btn_keyword = st.button("ํค์๋ ์ฐพ๊ธฐ")
|
110 |
+
if btn_keyword and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ
|
111 |
+
update_points(-1) # ํฌ์ธํธ ๊ฐ์
|
112 |
+
st.session_state.history.append(["ํค์๋ ์ฐพ๊ธฐ", -1, st.session_state.points])
|
113 |
+
#๋ค๋ฅธ ์ง๋ฌธ ๋ฃ๊ธฐ
|
114 |
+
highlighted_text = """**๋ฏผ์ฃผ์ฃผ์ ์ฌํ**๋ ๊ตญ๋ฏผ์ด ์ ์น์ ์ฐธ์ฌํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ค. ๊ทธ๋ฌํ ๊ถ๋ฆฌ๋ฅผ **์ฐธ์ ๊ถ**์ด๋ผ ํ๋๋ฐ, ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก โ์ ๊ฑฐโ๋ก ์คํ๋๋ค. ์ ๊ฑฐ๋ ์ฌํ ์ง๋จ์ ๋ํ์๋ ๊ณต์ง์๋ฅผ ์ ์ถํ์ฌ ๊ทธ๋ค์๊ฒ ๋ํ์ฑ์ ๋ถ์ฌํ๋ ํ์์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก **๋์ ํฌํ์จ**์ ๋ฏผ์ฃผ์ฃผ์์ **์ ๋น์ฑ ํ๋ณด**์ ๊น์ ๊ด๋ จ์ด ์๋ค.
|
115 |
+
|
116 |
+
**์ ๊ฑฐ ํฌํ ์ ๋**์๋ ํฌํ๊ถ ํ์ฌ๋ฅผ ํฌํ์์ ์์ ์์ฌ์ ๋งก๊ธฐ๋ โ**์์ ํฌํ์ **โ์ ํฌํ๊ถ ํ์ฌ๋ฅผ ๊ตญ๋ฏผ์ ์๋ฌด๋ก ๊ฐ์ฃผํ๊ณ ์ ๋นํ ์ฌ์ ์์ด ๊ธฐ๊ถํ๋ฉด ๋ฒ์ ์ ์ฌ๋ฅผ ๊ฐํ๋ โ**์๋ฌด ํฌํ์ **โ๊ฐ ์๋ค. ์ฐ๋ฆฌ๋๋ผ๋ ์์ ํฌํ์ ๋ฅผ ์ฑํํ๊ณ ์๋๋ฐ, ์ต๊ทผ ์น๋ฅธ ์ ๊ฑฐ์ ํ๊ท ํฌํ์จ์ด 50ํผ์ผํธ๋๋ก ๋ํ๋ฌ๋ค. ๊ฒฝ์ ๊ฐ๋ฐ ํ๋ ฅ ๊ธฐ๊ตฌ(**OECD**) ํ์๊ตญ ํ๊ท ์ด 70ํผ์ผํธ๋์ธ ๊ฒ์ ์๊ฐํ๋ฉด ๋งค์ฐ ๋ฎ์ ์์น๋ผ ํ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ด ์ง์๋์ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํด์ผ ํ๋ค๋ ์๊ฒฌ์ด ์ ์๋์๊ณ , ์์ ํฌํ์ ๊ฐ ๋ฏผ์ฃผ์ฃผ์์ ์์น์ ๋ง์ผ๋ฏ๋ก ์ด๋ฅผ ์ ์งํด์ผ ํ๋ค๋ ์๊ฒฌ๊ณผ ๋๋ฆฝํ๊ณ ์๋ค.
|
117 |
+
|
118 |
+
**์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ์๋ ์ธก**์ ๋ฎ์ ํฌํ์จ๋ก ํฌํ ๊ฒฐ๊ณผ์ **์ ๋น์ฑ์ ํ๋ณด**ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ฌ๊ฐํ๋ค๊ณ ์ฃผ์ฅํ๋ค. ๋ ์๋ฌด ํฌํ์ ์ ๊ฐ์ ์ฑ๊ณผ ๋ฒ์ ์ ์ฌ๊ฐ ํฌํ์จ์ ๋์ด๋ฏ๋ก ํฌํ์จ์ด ๋ฎ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตญ๋ฏผ ๋๋ถ๋ถ์ด ํฌํ์ ์ฐธ์ฌํ๊ฒ ๋๋ฉด ์ ์น์ธ๋ค์ด ๋ชจ๋ ๊ณ์ธต์ ์ง์ง๋ฅผ ๋ฐ๊ธฐ ์ํด ์ ์ฑ
๊ฒฝ์๋ ฅ์ ๋์ด๋ ค ํ ๊ฒ์ด๋ฏ๋ก **์ ์น ์์ธ ๊ณ์ธต**์ ๋์ฑ ๊ด์ฌ์ ์๋ ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค.
|
119 |
+
|
120 |
+
๋ฐ๋ฉด **์๋ฌด ํฌํ์ ์ ๋ฐ๋ํ๋ ์ธก**์ ํ์ฌ ์ฐ๋ฆฌ๋๋ผ์ ํฌํ์จ์ด ์ ์น ์ง๋์๋ค์ ๋ํ์ฑ์ ํผ์ํ ๋งํผ ์ฌ๊ฐํ ์ํฉ์ ์๋๋ผ๊ณ ์ฃผ์ฅํ๋ค. ๋ ํฌํ์จ์ ๋์ด๋ ๊ฒ๋ณด๋ค **๊ตญ๋ฏผ์ ์ ๋ขฐ๋ฅผ ํ๋ณต**ํ๋ ๊ฒ์ด ๋ ์ค์ํ๊ณ , ์๋ฏผ ๊ต์ก์ด๋ ๋ชจ์ ํฌํ ๊ต์ก ํ๋ก๊ทธ๋จ์ผ๋ก๋ ํฌํ์จ ์์น์ ๊ธฐ๋ํ ์ ์๋ค๋ฉฐ ์๋ฌด ํฌํ์ ์ ๋์
๋ง์ด ํฌํ์จ์ด๋ ์ ์น์ ๊ด์ฌ์ ๋์ด๋ ํด๊ฒฐ ๋ฐฉ์์ ์๋๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ๋ฉด, ์ ์ถ๋ ์ ์น์ธ๋ค์ด ๋์ ํฌํ์จ์ ํ๊ณ๋ก **์ํ๋ฌด์ธ์ ํ๋**๋ฅผ ๊ฐ๋ ๋ถ์์ฉ์ด ์๊ธด๋ค๋ ๊ฐ ํ๋ณด์๋ฅผ ์ ๋ชจ๋ฅด๋ ์ํ์์ ํฌํํ๋ ์ผ์ด ๋ฐ์ํ์ฌ **๊ตญ๋ฏผ์ ๋ป์ด ์คํ๋ ค ์๊ณก**๋ ์ ์๋ค๋ฉฐ ์ฐ๋ ค์ ๋ชฉ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ค.
|
121 |
+
"""
|
122 |
+
# highlighted_text = annotated_text(
|
123 |
+
# ("๋ฏผ์ฃผ์ฃผ์ ์ฌํ", ""), "๋ ๊ตญ๋ฏผ์ด ์ ์น์ ์ฐธ์ฌํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ค. ๊ทธ๋ฌํ ๊ถ๋ฆฌ๋ฅผ ", ("์ฐธ์ ๊ถ", ""), "์ด๋ผ ํ๋๋ฐ, ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก โ์ ๊ฑฐโ๋ก ์คํ๋๋ค. ์ ๊ฑฐ๋ ์ฌํ ์ง๋จ์ ๋ํ์๋ ๊ณต์ง์๋ฅผ ์ ์ถํ์ฌ ๊ทธ๋ค์๊ฒ ๋ํ์ฑ์ ๋ถ์ฌํ๋ ํ์์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ", ("๋๏ฟฝ๏ฟฝ ํฌํ์จ", ""), "์ ๋ฏผ์ฃผ์ฃผ์์ ", ("์ ๋น์ฑ ํ๋ณด", ""), "์ ๊น์ ๊ด๋ จ์ด ์๋ค.\n\n", ("์ ๊ฑฐ ํฌํ ์ ๋", ""), "์๋ ํฌํ๊ถ ํ์ฌ๋ฅผ ํฌํ์์ ์์ ์์ฌ์ ๋งก๊ธฐ๋ โ", ("์์ ํฌํ์ ", ""), "โ์ ํฌํ๊ถ ํ์ฌ๋ฅผ ๊ตญ๋ฏผ์ ์๋ฌด๋ก ๊ฐ์ฃผํ๊ณ ์ ๋นํ ์ฌ์ ์์ด ๊ธฐ๊ถํ๋ฉด ๋ฒ์ ์ ์ฌ๋ฅผ ๊ฐํ๋ โ", ("์๋ฌด ํฌํ์ ", ""), "โ๊ฐ ์๋ค. ์ฐ๋ฆฌ๋๋ผ๋ ์์ ํฌํ์ ๋ฅผ ์ฑํํ๊ณ ์๋๋ฐ, ์ต๊ทผ ์น๋ฅธ ์ ๊ฑฐ์ ํ๊ท ํฌํ์จ์ด 50ํผ์ผํธ๋๋ก ๋ํ๋ฌ๋ค. ๊ฒฝ์ ๊ฐ๋ฐ ํ๋ ฅ ๊ธฐ๊ตฌ(", ("OECD", ""), ") ํ์๊ตญ ํ๊ท ์ด 70ํผ์ผํธ๋์ธ ๊ฒ์ ์๊ฐํ๋ฉด ๋งค์ฐ ๋ฎ์ ์์น๋ผ ํ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ด ์ง์๋์ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํด์ผ ํ๋ค๋ ์๊ฒฌ์ด ์ ์๋์๊ณ , ์์ ํฌํ์ ๊ฐ ๋ฏผ์ฃผ์ฃผ์์ ์์น์ ๋ง์ผ๋ฏ๋ก ์ด๋ฅผ ์ ์งํด์ผ ํ๋ค๋ ์๊ฒฌ๊ณผ ๋๋ฆฝํ๊ณ ์๋ค.\n\n", ("์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ์๋ ์ธก", ""), "์ ๋ฎ์ ํฌํ์จ๋ก ํฌํ ๊ฒฐ๊ณผ์ ", ("์ ๋น์ฑ์ ํ๋ณด", ""), "ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ฌ๊ฐํ๋ค๊ณ ์ฃผ์ฅํ๋ค. ๋ ์๋ฌด ํฌํ์ ์ ๊ฐ์ ์ฑ๊ณผ ๋ฒ์ ์ ์ฌ๊ฐ ํฌํ์จ์ ๋์ด๋ฏ๋ก ํฌํ์จ์ด ๋ฎ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตญ๋ฏผ ๋๋ถ๋ถ์ด ํฌํ์ ์ฐธ์ฌํ๊ฒ ๋๋ฉด ์ ์น์ธ๋ค์ด ๋ชจ๋ ๊ณ์ธต์ ์ง์ง๋ฅผ ๋ฐ๊ธฐ ์ํด ์ ์ฑ
๊ฒฝ์๋ ฅ์ ๋์ด๋ ค ํ ๊ฒ์ด๋ฏ๋ก ", ("์ ์น ์์ธ ๊ณ์ธต", ""), "์ ๋์ฑ ๊ด์ฌ์ ์๋ ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค.\n\n๋ฐ๋ฉด ", ("์๋ฌด ํฌํ์ ์ ๋ฐ๋ํ๋ ์ธก", ""), "์ ํ์ฌ ์ฐ๋ฆฌ๋๋ผ์ ํฌํ์จ์ด ์ ์น ์ง๋์๋ค์ ๋ํ์ฑ์ ํผ์ํ ๋งํผ ์ฌ๊ฐํ ์ํฉ์ ์๋๋ผ๊ณ ์ฃผ์ฅํ๋ค. ๋ ํฌํ์จ์ ๋์ด๋ ๊ฒ๋ณด๋ค ", ("๊ตญ๋ฏผ์ ์ ๋ขฐ๋ฅผ ํ๋ณต", ""), "ํ๋ ๊ฒ์ด ๋ ์ค์ํ๊ณ , ์๋ฏผ ๊ต์ก์ด๋ ๋ชจ์ ํฌํ ๊ต์ก ํ๋ก๊ทธ๋จ์ผ๋ก๋ ํฌํ์จ ์์น์ ๊ธฐ๋ํ ์ ์๋ค๋ฉฐ ์๋ฌด ํฌํ์ ์ ๋์
๋ง์ด ํฌํ์จ์ด๋ ์ ์น์ ๊ด์ฌ์ ๋์ด๋ ํด๊ฒฐ ๋ฐฉ์์ ์๋๋ผ๊ณ ์ด์ผ๊ธฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌด ํฌํ์ ๋ฅผ ๋์
ํ๋ฉด, ์ ์ถ๋ ์ ์น์ธ๋ค์ด ๋์ ํฌํ์จ์ ํ๊ณ๋ก ", ("์ํ๋ฌด์ธ์ ํ๋", ""), "๋ฅผ ๊ฐ๋ ๋ถ์์ฉ์ด ์๊ธด๋ค๋ ๊ฐ ํ๋ณด์๋ฅผ ์ ๋ชจ๋ฅด๋ ์ํ์์ ํฌํํ๋ ์ผ์ด ๋ฐ์ํ์ฌ ", ("๊ตญ๋ฏผ์ ๋ป์ด ์คํ๋ ค ์๊ณก", ""), "๋ ์ ์๋ค๋ฉฐ ์ฐ๋ ค์ ๋ชฉ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ค."
|
124 |
+
# )
|
125 |
+
|
126 |
+
# ๊ธฐ์กด ์ง๋ฌธ ์ง์ฐ๊ธฐ
|
127 |
+
text_placeholder.empty()
|
128 |
+
#text_container์ highlight๋ ํ
์คํธ๋ฅผ ์ถ๋ ฅ
|
129 |
+
with text_container:
|
130 |
+
st.markdown(highlighted_text, unsafe_allow_html=True)
|
131 |
+
else:
|
132 |
+
if st.session_state.points == 0:
|
133 |
+
#ํฌ์ธํธ๊ฐ ์์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ๊ตฌ ์ถ๊ฐ
|
134 |
+
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ํค์๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.")
|
135 |
+
pass
|
136 |
+
|
137 |
+
with cols[1]:
|
138 |
+
global btn_explanation
|
139 |
+
btn_explanation= st.button("์ถ๊ฐ ์ค๋ช
")
|
140 |
+
if btn_explanation and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ
|
141 |
+
update_points(1) # ํฌ์ธํธ ์ฆ๊ฐ
|
142 |
+
st.session_state.history.append(["์ถ๊ฐ ์ค๋ช
", 1, st.session_state.points])
|
143 |
+
|
144 |
+
with cols[2]:
|
145 |
+
global btn_simple
|
146 |
+
btn_simple = st.button("์ฌ์ด ํํ")
|
147 |
+
if btn_simple and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ
|
148 |
+
update_points(-1) # ํฌ์ธํธ ๊ฐ์
|
149 |
+
st.session_state.history.append(["์ฌ์ด ํํ", -1, st.session_state.points])
|
150 |
+
|
151 |
+
|
152 |
+
with cols[3]:
|
153 |
+
global btn_rewrite
|
154 |
+
btn_rewrite = st.button("๋ค์ ์ฐ๊ธฐ")
|
155 |
+
if btn_rewrite and st.session_state.points > 0: # ํฌ์ธํธ ์ฒดํฌ
|
156 |
+
update_points(-1) # ํฌ์ธํธ ๊ฐ์
|
157 |
+
st.session_state.history.append(["๋ค์ ์ฐ๊ธฐ", -1, st.session_state.points])
|
158 |
+
|
159 |
+
|
160 |
+
return btn_keyword, btn_explanation, btn_simple, btn_rewrite
|
161 |
+
|
162 |
+
|
163 |
+
def display_output():
|
164 |
+
with st.container():
|
165 |
+
st.header("๊ฒฐ๊ณผ")
|
166 |
+
if btn_explanation and st.session_state.points > 0:
|
167 |
+
explanation_task = f"Explain the term '{user_input}' in a simple manner, based on the context of the following passage: {user_text}"
|
168 |
+
|
169 |
+
messages = [
|
170 |
+
{"role": "system", "content": "You are a helpful assistant that explains complex topics in a way that an elementary school student can understand. use only korean"},
|
171 |
+
{"role": "user", "content": explanation_task}
|
172 |
+
]
|
173 |
+
|
174 |
+
response = openai.ChatCompletion.create(
|
175 |
+
model="gpt-3.5-turbo-16k",
|
176 |
+
messages=messages,
|
177 |
+
temperature=0.1,
|
178 |
+
max_tokens=200
|
179 |
+
)
|
180 |
+
|
181 |
+
explanation = response['choices'][0]['message']['content']
|
182 |
+
|
183 |
+
# ์ถ๊ฐ ์ค๋ช
|
184 |
+
st.write(f"์ถ๊ฐ ์ค๋ช
: {explanation}")
|
185 |
+
pass
|
186 |
+
else:
|
187 |
+
if st.session_state.points == 0:
|
188 |
+
#ํฌ์ธํธ๊ฐ ์์ด์ ์ฌ์ฉํ ๏ฟฝ๏ฟฝ๏ฟฝ ์๋ค๋ ๋ฌธ๊ตฌ ์ถ๊ฐ
|
189 |
+
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ์ถ๊ฐ ์ค๋ช
๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.")
|
190 |
+
|
191 |
+
pass
|
192 |
+
|
193 |
+
if btn_simple and st.session_state.points > 0:
|
194 |
+
explanation_task = f"Describe the fingerprint of '{user_text}' in a way that an elementary school student could understand."
|
195 |
+
|
196 |
+
messages = [
|
197 |
+
{"role": "system", "content": "You are a helpful assistant that explains complex topics in a way that an elementary school student can understand. use only korean"},
|
198 |
+
{"role": "user", "content": explanation_task}
|
199 |
+
]
|
200 |
+
|
201 |
+
response = openai.ChatCompletion.create(
|
202 |
+
model="gpt-3.5-turbo-16k",
|
203 |
+
messages=messages,
|
204 |
+
temperature=0.1,
|
205 |
+
max_tokens=2500
|
206 |
+
)
|
207 |
+
|
208 |
+
explanation = response['choices'][0]['message']['content']
|
209 |
+
|
210 |
+
# ์ฌ์ด ํํ์ผ๋ก ๊ฒฐ๊ณผ ์ถ๋ ฅ
|
211 |
+
st.write(f"์ฌ์ด ๊ธ: {explanation}")
|
212 |
+
pass
|
213 |
+
else:
|
214 |
+
if st.session_state.points == 0:
|
215 |
+
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ์ฌ์ด ํํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.")
|
216 |
+
pass
|
217 |
+
|
218 |
+
if btn_rewrite and st.session_state.points > 0:
|
219 |
+
explanation_task = f"Rewrite the contents of '{user_input}' so that it will pass the writing test."
|
220 |
+
|
221 |
+
messages = [
|
222 |
+
{"role": "system", "content": "You are a helpful assistant. use only korean"},
|
223 |
+
{"role": "user", "content": explanation_task}
|
224 |
+
]
|
225 |
+
|
226 |
+
response = openai.ChatCompletion.create(
|
227 |
+
model="gpt-3.5-turbo-16k",
|
228 |
+
messages=messages,
|
229 |
+
temperature=0.1,
|
230 |
+
max_tokens=2500
|
231 |
+
)
|
232 |
+
|
233 |
+
explanation = response['choices'][0]['message']['content']
|
234 |
+
|
235 |
+
st.write(f"๋ค์ ์ฐ๊ธฐ: {explanation}")
|
236 |
+
pass
|
237 |
+
else:
|
238 |
+
if st.session_state.points == 0:
|
239 |
+
st.write("ํฌ์ธํธ๊ฐ ์์ด์ ๋ค์ ์ฐ๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.")
|
240 |
+
|
241 |
+
pass
|
242 |
+
|
243 |
+
|
244 |
+
def main():
|
245 |
+
st.title("ํ๊ตญ์ด ํ์ต์๋ฅผ ์ํ HCI tools")
|
246 |
+
#ํฌ์ธํธ ์์คํ
์ค๋ช
์ถ๊ฐ
|
247 |
+
st.sidebar.markdown("ํฌ์ธํธ๋ 3์ ๋ถํฐ ์์ํด์, **ํค์๋ ์ฐพ๊ธฐ**, **์ฌ์ด ํํ**, **๋ค์ ์ฐ๊ธฐ**๋ฅผ ํ ๋ 1์ ์ฉ ๊ฐ์ํฉ๋๋ค. **์ถ๊ฐ ์ค๋ช
**๊ณผ **์ฑ์ ํ๊ธฐ**๋ฅผ ํ ๋ 1์ ์ฉ ์ฆ๊ฐํฉ๋๋ค. ํฌ์ธํธ๊ฐ 0์ ์ด ๋๋ฉด ๋ ์ด์ ์์
์ ํ ์ ์์ต๋๋ค. ")
|
248 |
+
|
249 |
+
col1, col2 = st.columns(2)
|
250 |
+
|
251 |
+
with col1:
|
252 |
+
display_passage(col1)
|
253 |
+
display_summary(col1)
|
254 |
+
with col2:
|
255 |
+
btn_keyword, btn_explanation, btn_simple, btn_rewrite = display_input_btns(col2)
|
256 |
+
display_output()
|
257 |
+
#ํฌ์ธํธ ํ์
|
258 |
+
display_points()
|
259 |
+
#ํฌ์ธํธ ๋ณํ ํ์
|
260 |
+
display_markdown_table()
|
261 |
+
|
262 |
+
|
263 |
+
|
264 |
+
if __name__ == "__main__":
|
265 |
+
main()
|
requirements.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
openai
|
2 |
+
google-api-python-client
|
3 |
+
oauth2client
|
4 |
+
st-annotated-text
|