Update app.py
Browse files
app.py
CHANGED
|
@@ -26,31 +26,38 @@ model = genai.GenerativeModel(
|
|
| 26 |
|
| 27 |
def generate_text(grade, num_paragraphs, sentences_per_paragraph, structure, topic):
|
| 28 |
prompt = f"""
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
full_text = "" # 전체 텍스트 저장 변수 초기화
|
| 38 |
-
|
| 39 |
try:
|
| 40 |
-
response = model.generate_content(prompt
|
| 41 |
-
|
| 42 |
-
full_text += chunk.text
|
| 43 |
-
# Markdown to HTML 변환
|
| 44 |
-
html_text = markdown.markdown(full_text, extensions=['tables'])
|
| 45 |
-
output_area.markdown(html_text, unsafe_allow_html=True)
|
| 46 |
-
time.sleep(0.1) # 지연 추가 (필요에 따라 조절)
|
| 47 |
|
| 48 |
except Exception as e:
|
| 49 |
st.error(f"에러 발생: {str(e)}")
|
| 50 |
return ""
|
| 51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
return full_text
|
| 53 |
|
|
|
|
|
|
|
| 54 |
# Streamlit 인터페이스 설정
|
| 55 |
colored_header(
|
| 56 |
label="📜 초등학생을 위한 읽기 자료 생성기",
|
|
@@ -62,13 +69,18 @@ add_vertical_space(1)
|
|
| 62 |
|
| 63 |
with st.sidebar:
|
| 64 |
st.header("옵션 설정")
|
| 65 |
-
grade = st.selectbox("학년",
|
| 66 |
num_paragraphs = st.number_input("문단 수", min_value=1, value=3)
|
| 67 |
-
sentences_per_paragraph = st.selectbox("문단 당 문장 수", [
|
| 68 |
structure = st.selectbox("설명문 구조", ["정의와 예시", "비교와 대조", "분류", "분석", "인과", "순서"], index=0)
|
| 69 |
topic = st.text_area("✏️ 주제 및 내용을 입력하세요 ", height=200)
|
| 70 |
|
| 71 |
generate_button = st.button("읽기 자료 생성")
|
| 72 |
|
| 73 |
# 출력 영역을 함수 외부에 정의
|
| 74 |
-
output_area = st.empty()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |
def generate_text(grade, num_paragraphs, sentences_per_paragraph, structure, topic):
|
| 28 |
prompt = f"""
|
| 29 |
+
초등학교 {grade}학년 학생이 이해할 수 있는 수준의 설명문을 작성.
|
| 30 |
+
설명문의 주제는 {topic}이며, 주제를 중심으로 {structure} 구조에 따른 설명문을 작성할 것.
|
| 31 |
+
전체 문단 수는 {num_paragraphs}개 문단 내외, 문단 당 문장 수는 {sentences_per_paragraph}개 문장 내외.
|
| 32 |
+
설명문은 줄글로 작성하고 문단 구분을 명확히 할 것. 지정된 문단 수와 문단 당 문장 수를 준수하기.
|
| 33 |
+
문단마다, 문단의 첫 문장 또는 마지막 문장이 문단의 중심 문장이 되도록 할 것. (중심 문장이란 문단의 내용을 모두 포함할 수 있는 문장)
|
| 34 |
+
초등학교 {grade}학년 수준에 어려운 단어와 한자어, 학습 용어는 마지막에 어휘 목록과 어휘의 뜻을 초등학교 {grade}학년 수준에 맞게 유의어로 또는 뜻을 풀어 설명하는 부분을 따로 추가할 것.
|
| 35 |
+
"""
|
| 36 |
+
|
| 37 |
full_text = "" # 전체 텍스트 저장 변수 초기화
|
|
|
|
| 38 |
try:
|
| 39 |
+
response = model.generate_content(prompt) #stream=True 삭제
|
| 40 |
+
full_text = response.text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
|
| 42 |
except Exception as e:
|
| 43 |
st.error(f"에러 발생: {str(e)}")
|
| 44 |
return ""
|
| 45 |
|
| 46 |
+
#Markdown to HTML 변환
|
| 47 |
+
html_text = markdown.markdown(full_text, extensions=['tables'])
|
| 48 |
+
|
| 49 |
+
#출력 및 복사 기능 추가
|
| 50 |
+
output_area.markdown(html_text, unsafe_allow_html=True)
|
| 51 |
+
copy_button = st.button("출력 내용 복사")
|
| 52 |
+
if copy_button:
|
| 53 |
+
pyperclip.copy(full_text)
|
| 54 |
+
st.success("클립보드에 복사되었습니다!")
|
| 55 |
+
|
| 56 |
+
|
| 57 |
return full_text
|
| 58 |
|
| 59 |
+
|
| 60 |
+
|
| 61 |
# Streamlit 인터페이스 설정
|
| 62 |
colored_header(
|
| 63 |
label="📜 초등학생을 위한 읽기 자료 생성기",
|
|
|
|
| 69 |
|
| 70 |
with st.sidebar:
|
| 71 |
st.header("옵션 설정")
|
| 72 |
+
grade = st.selectbox("학년", range(1, 7)) # 드롭다운 수정
|
| 73 |
num_paragraphs = st.number_input("문단 수", min_value=1, value=3)
|
| 74 |
+
sentences_per_paragraph = st.selectbox("문단 당 문장 수", [3, 4, 5, 6, 7, 8, 9, 10]) # 드롭다운 수정
|
| 75 |
structure = st.selectbox("설명문 구조", ["정의와 예시", "비교와 대조", "분류", "분석", "인과", "순서"], index=0)
|
| 76 |
topic = st.text_area("✏️ 주제 및 내용을 입력하세요 ", height=200)
|
| 77 |
|
| 78 |
generate_button = st.button("읽기 자료 생성")
|
| 79 |
|
| 80 |
# 출력 영역을 함수 외부에 정의
|
| 81 |
+
output_area = st.empty()
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
if generate_button:
|
| 85 |
+
sentences_per_paragraph_range = str(sentences_per_paragraph) # 문장 수 변수 타입 변경
|
| 86 |
+
generate_text(grade, num_paragraphs, sentences_per_paragraph_range, structure, topic)
|