Spaces:
Sleeping
Sleeping
Upload 2 files
Browse files- app.py +728 -0
- requirements.txt +5 -0
app.py
ADDED
@@ -0,0 +1,728 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import random
|
3 |
+
import os
|
4 |
+
import re
|
5 |
+
from huggingface_hub import InferenceClient
|
6 |
+
from youtube_transcript_api import YouTubeTranscriptApi, NoTranscriptFound
|
7 |
+
from fpdf import FPDF
|
8 |
+
from fpdf.enums import XPos, YPos
|
9 |
+
from datetime import datetime
|
10 |
+
|
11 |
+
# ํด๋ผ์ด์ธํธ ์์ฑ ํจ์
|
12 |
+
def create_client(model_name):
|
13 |
+
return InferenceClient(model_name, token=os.getenv("HF_TOKEN"))
|
14 |
+
|
15 |
+
client = create_client("CohereForAI/c4ai-command-r-plus")
|
16 |
+
|
17 |
+
# API ํธ์ถ ํจ์
|
18 |
+
def call_api(content, system_message, max_tokens, temperature, top_p):
|
19 |
+
messages = [{"role": "system", "content": system_message}, {"role": "user", "content": content}]
|
20 |
+
random_seed = random.randint(0, 1000000)
|
21 |
+
response = client.chat_completion(messages=messages, max_tokens=max_tokens, temperature=temperature, top_p=top_p, seed=random_seed)
|
22 |
+
return response.choices[0].message.content
|
23 |
+
|
24 |
+
# ์ ๋ณด ๋ถ์ ํจ์
|
25 |
+
def analyze_info(category, style, transcripts):
|
26 |
+
transcript_list = transcripts.split("\n\n---\n\n")
|
27 |
+
analyzed_content = f"์ ํํ ์นดํ
๊ณ ๋ฆฌ: {category}\n์ ํํ ํฌ์คํ
์คํ์ผ: {style}\n\n"
|
28 |
+
for i, transcript in enumerate(transcript_list, 1):
|
29 |
+
analyzed_content += f"์ ํ๋ธ ํธ๋์คํฌ๋ฆฝํธ {i}:\n{transcript}\n\n"
|
30 |
+
return analyzed_content
|
31 |
+
|
32 |
+
# ๋ธ๋ก๊ทธ ํฌ์คํธ ์์ฑ ํจ์
|
33 |
+
def generate_blog_post(category, style, transcripts, category_prompt, style_prompt, max_tokens, temperature, top_p):
|
34 |
+
full_content = analyze_info(category, style, transcripts)
|
35 |
+
combined_prompt = f"{category_prompt}\n\n{style_prompt}\n\n{full_content}"
|
36 |
+
modified_text = call_api(combined_prompt, "", max_tokens, temperature, top_p)
|
37 |
+
return modified_text.replace('\n', '\n\n')
|
38 |
+
|
39 |
+
# ์ ํ๋ธ ๋๋ณธ ์์ฝ ํจ์
|
40 |
+
def summarize_transcript(transcripts, system_message, max_tokens, temperature, top_p):
|
41 |
+
summary = call_api(transcripts, system_message, max_tokens, temperature, top_p)
|
42 |
+
return summary
|
43 |
+
|
44 |
+
# ์ ํ๋ธ ๋น๋์ค ID ์ถ์ถ ํจ์
|
45 |
+
def get_video_id(youtube_url):
|
46 |
+
video_id_match = re.search(r"(?<=v=)[^#&?]*", youtube_url) or re.search(r"(?<=youtu.be/)[^#&?]*", youtube_url)
|
47 |
+
return video_id_match.group(0) if video_id_match else None
|
48 |
+
|
49 |
+
# ์ ํ๋ธ ํธ๋์คํฌ๋ฆฝํธ ์ถ์ถ ํจ์
|
50 |
+
def get_transcript(youtube_url):
|
51 |
+
video_id = get_video_id(youtube_url)
|
52 |
+
if not video_id:
|
53 |
+
return "Invalid YouTube URL. Please enter a valid URL."
|
54 |
+
|
55 |
+
language_order = ['ko', 'en', 'ja', 'zh-Hans', 'pt', 'es', 'it', 'fr', 'de', 'ru']
|
56 |
+
for lang in language_order:
|
57 |
+
try:
|
58 |
+
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=[lang])
|
59 |
+
return f"Transcript in {lang}:\n\n{' '.join([entry['text'] for entry in transcript])}"
|
60 |
+
except NoTranscriptFound:
|
61 |
+
continue
|
62 |
+
except Exception as e:
|
63 |
+
return f"Error: {str(e)}"
|
64 |
+
return "No transcript available in the specified languages."
|
65 |
+
|
66 |
+
# ์นดํ
๊ณ ๋ฆฌ๋ณ ํ๋กฌํํธ ํจ์
|
67 |
+
def get_blog_post_prompt(category):
|
68 |
+
if category == "์ผ๋ฐํ":
|
69 |
+
return """
|
70 |
+
#์ ํ๋ธ ๋๋ณธ์ ๋ธ๋ก๊ทธ ํฌ์คํ
์ผ๋ก ๋ณํํ๋ ๊ท์น(์ผ๋ฐํ_v4)
|
71 |
+
##[๊ธฐ๋ณธ ๊ท์น]
|
72 |
+
1.ํ๊ตญ์ด๋ก ์์ฑํ๋, ์ฝ๊ณ ์์ฐ์ค๋ฌ์ด ํํ ์ฌ์ฉ
|
73 |
+
2.์ฌ๋ฌ ์ ํ๋ธ ๋๋ณธ์ ๋ด์ฉ์ ์ข
ํฉํ์ฌ ํ๋์ ์ผ๊ด๋ ๋ธ๋ก๊ทธ ๊ธ๋ก ์ฌ๊ตฌ์ฑ
|
74 |
+
3. ๊ฐ ์น์
์ ์ต์ 400์ ์ด์ ์์ฑํ๊ณ ์ต์ข
๊ธ์ ๊ธธ์ด๋ 3000์ ์ด์์ผ๋ก ์์ฑ
|
75 |
+
4. ์ถ์ฒ ์ ๋ชฉ 3๊ฐ์ง, ๋์
๋ถ, ๋ณธ๋ก (์์ฃผ์ ํฌํจ), ๊ฒฐ๋ก ์ ๊ตฌ์กฐ๋ก ์์ฑํ ๊ฒ(๋ค๋ฅธ ๊ตฌ์กฐ ์ถ๋ ฅ๊ธ์ง)
|
76 |
+
5. ์ฃผ์ ์ ๋ง๋ ๋
์ฐฝ์ ์ธ ๊ฐ์ ํ์ ๋๋ค์์ ์ฌ์ฉํ์ฌ ์์ฑํ ๊ฒ(ํ๋ช
๋ณ๋ ์ถ๋ ฅ ๊ธ์ง)
|
77 |
+
6. ํฌ์คํ
์คํ์ผ์ ๋ง๊ฒ ๋งํฌ, ์ดํฌ, ์ดํ๋ฅผ ์กฐ์ ํ ๊ฒ
|
78 |
+
|
79 |
+
##[ํฌ์คํ
๊ตฌ์กฐ]
|
80 |
+
###[์ถ์ฒ ์ ๋ชฉ]
|
81 |
+
1. ํตํฉ๋ ์ฃผ์ ๋ฅผ ๋ฐ์ํ๊ณ ๋
์์ ํฅ๋ฏธ๋ฅผ ์ ๋ฐํ๋ ์ ๋ชฉ 3๊ฐ์ง ์ ์
|
82 |
+
|
83 |
+
###[๋์
๋ถ]
|
84 |
+
1. ์ฌ๋ฌ ์์์ ๊ณตํต ์ฃผ์ ๋ ํต์ฌ ๋ฉ์์ง๋ฅผ ์๊ฐ
|
85 |
+
2. ๋
์์ ๊ด์ฌ์ ๋๋ ์์(์ง๋ฌธ, ํฅ๋ฏธ๋ก์ด ์ฌ์ค, ํต๊ณ, ๊ณต๊ฐ๋ ํ์ฑ ๋ฑ)๋ก ์์
|
86 |
+
3. ๊ธ์์ ๋ค๋ฃฐ ์ฃผ์ ๋ด์ฉ์ ๊ฐ๋ตํ ์๊ฐ
|
87 |
+
|
88 |
+
###[๋ณธ๋ก ]
|
89 |
+
1. ์ฃผ์ ๋ณ ํตํฉ ๋ถ์
|
90 |
+
- ๊ณตํต ์ฃผ์ ๋ ์ฐ๊ด์ฑ ์๋ ๋ด์ฉ์ ์ค์ฌ์ผ๋ก ์น์
๊ตฌ์ฑ
|
91 |
+
- ๊ฐ ์์์ ๊ด์ ์ด๋ ์ ๋ณด๋ฅผ ๋น๊ต/๋์กฐํ๋ฉฐ ์ข
ํฉ
|
92 |
+
- ์น์
๊ฐ ์์ฐ์ค๋ฌ์ด ์ฐ๊ฒฐ๊ณผ ํ๋ฆ ์ ์ง
|
93 |
+
2. ๋
ํนํ ์ธ์ฌ์ดํธ ๊ฐ์กฐ
|
94 |
+
- ๊ฐ ์์์์ ์ ์๋ ๊ณ ์ ํ ๊ด์ ์ด๋ ์ ๋ณด ๊ฐ์กฐ
|
95 |
+
- ํ์์ ๋ฐฐ๊ฒฝ ์ ๋ณด, ์์, ๊ด๋ จ ํต๊ณ ๋ฑ์ ์ถ๊ฐํ์ฌ ๋ด์ฉ ๋ณด๊ฐ
|
96 |
+
3. ๋ฐ์ดํฐ ๋ฐ ์์ ํตํฉ
|
97 |
+
- ์ฌ๋ฌ ๋๋ณธ์์ ์ ์๋ ๋ฐ์ดํฐ๋ ์์๋ฅผ ์ข
ํฉํ์ฌ ์ ์
|
98 |
+
- ๋
์๊ฐ ๊ณต๊ฐํ ์ ์๋ ์ํฉ์ด๋ ์ฌ๋ก ํฌํจ
|
99 |
+
4. ์๊ฐ์ ํ๋ฆ ๋๋ ๋ฐ์ ๊ณผ์ ๋ฐ์
|
100 |
+
- ์ฃผ์ ์ ๊ดํ ์๊ฐ์ ๋ณํ๋ ๋ฐ์ ๊ณผ์ ์ด ๏ฟฝ๏ฟฝ๏ฟฝ๋ค๋ฉด ์ด๋ฅผ ์ค๋ช
|
101 |
+
|
102 |
+
###[๊ฒฐ๋ก ]
|
103 |
+
1. ํตํฉ๋ ๋ด์ฉ์ ํต์ฌ ํฌ์ธํธ ์์ฝ
|
104 |
+
2. ๋
์์๊ฒ ๊ด๋ จ ํ๋์ด๋ ์๊ฐ์ ๋ณํ ์ ๋
|
105 |
+
3. ์ถ๊ฐ ํ๊ตฌ๊ฐ ํ์ํ ์ฃผ์ ๋ ํฅํ ์ ๋ง ์ ์
|
106 |
+
|
107 |
+
##[์ต์ ํ ์ ๋ต]
|
108 |
+
1. SEO ์ต์ ํ
|
109 |
+
- ํตํฉ๋ ์ฃผ์ ์ ๊ด๋ จ๋ ์ฃผ์ ํค์๋๋ฅผ ์ ๋ชฉ, ์์ ๋ชฉ, ๋ณธ๋ฌธ์ ์์ฐ์ค๋ฝ๊ฒ ํฌํจ
|
110 |
+
- ๊ฒ์ ์๋์ ๋ถํฉํ๋ ํฌ๊ด์ ์ธ ๋ด์ฉ ๊ตฌ์ฑ
|
111 |
+
2. ๊ฐ๋
์ฑ ํฅ์
|
112 |
+
- ๊ฐ๊ฒฐํ๊ณ ๋ช
ํํ ๋ฌธ์ฅ ์ฌ์ฉ
|
113 |
+
- ์ ์ ํ ๋จ๋ฝ ๊ตฌ๋ถ๊ณผ ์ฌ๋ฐฑ ํ์ฉ
|
114 |
+
3. ๋
์ ์ฐธ์ฌ ์ ๋
|
115 |
+
- ๋
์์ ๊ฒฝํ์ด๋ ์๊ฒฌ์ ๋ฌป๋ ์ง๋ฌธ ํฌํจ
|
116 |
+
- ๊ด๋ จ ์ ๋ณด๋ ์ถ๊ฐ ์๋ฃ์ ๋ํ ์๋ด ์ ๊ณต
|
117 |
+
|
118 |
+
##[๊ต์ ๋ฐ ํธ์ง]
|
119 |
+
1. ๋ง์ถค๋ฒ, ๋ฌธ๋ฒ, ์ดํ ์ฌ์ฉ์ ์ ํ์ฑ ํ์ธ
|
120 |
+
2. ๋ฌธ์ฒด์ ํค์ ์ผ๊ด์ฑ ์ ์ง
|
121 |
+
3. ์ ์ฒด ๊ธ์ ๋
ผ๋ฆฌ์ ํ๋ฆ๊ณผ ๊ตฌ์กฐ ์ ๊ฒ
|
122 |
+
4. 'ํ์'๋ผ๋ ํํ ์ ์ธ
|
123 |
+
5. ์ ํ๋ธ ๊ด๋ จ ํํ ์ ๊ฑฐ ๋ฐ ๋ธ๋ก๊ทธ ํ์์ ๋ง๊ฒ ์กฐ์
|
124 |
+
6. ์ ํ๋ธ ํน์ ์ฉ์ด(์: '๊ตฌ๋
', '์ข์์', '์๋ฆผ', '๋ค์ ์์' ๋ฑ) ์ฌ์ฉ ๊ธ์ง
|
125 |
+
7. '์ ํ๋ฒ', 'YouTuber' ๋ฑ์ ํํ์ '์ ์์' ๋๋ '์งํ์' ๊ฐ์ ๋ค๋ฅธ ํํ์ผ๋ก ๋์ฒด
|
126 |
+
8. ์ฑ๋๋ช
, ์ ์์ ์ค๋ช
๋ฑ ๊ฐ์ธ ์ ๋ณด ์ ์ธ
|
127 |
+
|
128 |
+
##[์ฃผ์์ฌํญ]
|
129 |
+
1. ๋๋ณธ์ ์ง์ ์ ์ธ ์ธ์ฉ ๊ธ์ง, ๋ด์ฉ์ ์ฌ๊ตฌ์ฑํ์ฌ ์์ฑ
|
130 |
+
2. ์์ถฉ๋๋ ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ ๊ณต์ ํ๊ฒ ๋ค๋ฃจ๊ณ ๊ฐ๋ฅํ ์ค๋ช
์ ์
|
131 |
+
"""
|
132 |
+
elif category == "์ ๋ณด์ฑ":
|
133 |
+
return """
|
134 |
+
#์ ํ๋ธ ๋๋ณธ์ ๋ธ๋ก๊ทธ ํฌ์คํ
์ผ๋ก ๋ณํํ๋ ๊ท์น(์ ๋ณด์ฑ_v4)
|
135 |
+
##[๊ธฐ๋ณธ ์์น]
|
136 |
+
1. ๋ฐ๋์ ํ๊ตญ์ด(ํ๊ธ)๋ก ์์ฑํ๋ผ
|
137 |
+
2. ์ฌ๋ฌ ์ ํ๋ธ ๋๋ณธ์ ๋ด์ฉ์ ์ข
ํฉํ์ฌ ํ๋์ ์ฃผ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ธ๋ก๊ทธ ๊ธ๋ก ์ฌ๊ตฌ์ฑํ๋ผ
|
138 |
+
3. ์ต์ข
๊ธ์ ๊ธธ์ด๋ 3000-4000์ ์ฌ์ด๋ก ์์ฑ
|
139 |
+
4. ์ถ์ฒ์ ๋ชฉ3๊ฐ์ง, ๋์
๋ถ, ๋ณธ๋ก , ๊ฒฐ๋ก ์ ๊ตฌ์กฐ๋ก ์์ฑ
|
140 |
+
5. ๊ฐ๊ด์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ํค์ผ๋ก ์์ฑ
|
141 |
+
6. ์ฌ๋ฌ ์ ํ๋ธ ๋๋ณธ์ ๋ด์ฉ์ ์ข
ํฉํ์ฌ ํ๋์ ํฌ๊ด์ ์ด๊ณ ๋
์ฐฝ์ ์ธ ๋ธ๋ก๊ทธ ๊ธ ์์ฑ
|
142 |
+
|
143 |
+
##[ํฌ์คํ
๊ตฌ์กฐ]
|
144 |
+
###[์ถ์ฒ์ ๋ชฉ]
|
145 |
+
1. ์ฃผ์ ๋ฅผ ๋ช
ํํ ๋ํ๋ด๊ณ ๋
์์ ๊ด์ฌ์ ๋ ์ ์๋ ์ ๋ชฉ 3๊ฐ์ง๋ฅผ ๊ฐ์ฅ ๋จผ์ ์ถ๋ ฅํ๋ผ
|
146 |
+
2. ๋
์์ ๊ด์ฌ์ ๋ ์ ์๋ ํํ๋ก ์์ฑํ๋ผ(์: "์์๋๋ฉด ์ ์ฉํ ~", "์ ๋ฌธ๊ฐ๊ฐ ์๋ ค์ฃผ๋ ~")
|
147 |
+
|
148 |
+
##[๋์
๋ถ]
|
149 |
+
1. ์ฃผ์ ์ ์ค์์ฑ๊ณผ ์ผ์์ํ์์์ ๊ด๋ จ์ฑ ์ค๋ช
|
150 |
+
2. ๋ค๋ฃฐ ์ฃผ์ ๋ด์ฉ ๊ฐ๋ตํ ์๊ฐ
|
151 |
+
3. ๋
์๊ฐ ์ป์ ์ ์๋ ์ค์ฉ์ ์ธ ์ ๋ณด๋ ์ด์ ์ ์
|
152 |
+
4. ๋
์์ ๊ด์ฌ์ ๋๋ ์์(์ง๋ฌธ, ํฅ๋ฏธ๋ก์ด ์ฌ์ค, ํต๊ณ, ๊ณต๊ฐ๋ ํ์ฑ ๋ฑ)๋ก ์์
|
153 |
+
|
154 |
+
###[๋ณธ๋ก ]
|
155 |
+
1. ์ฃผ์ ์ ๋ฐ๋ผ 4~6๊ฐ์ ์ฃผ์ ์น์
์ผ๋ก ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ๋ผ.
|
156 |
+
2. ์์ฑ๋ ๊ธ์ด 2500์ ์ด์ ๋๋๋ก ์์ฑํ๋ผ
|
157 |
+
3. ๊ฐ ์น์
์ ๋ช
ํํ ์์ ๋ชฉ์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํ๋ผ
|
158 |
+
4. ์ ๋ณด์ ์ค์๋์ ๋ฐ๋ผ ๋ด์ฉ์ ๊น์ด์ ์์ ์กฐ์ ํ๋ผ
|
159 |
+
5. ๊ฐ ์น์
์ ์ฃผ์ ์ ํต์ฌ ์ธก๋ฉด์ ๋ค๋ฃจ๋๋กํ๋ค.
|
160 |
+
|
161 |
+
###[๊ฒฐ๋ก ]
|
162 |
+
1. ์ฃผ์ ํฌ์ธํธ ์์ฝ
|
163 |
+
2. ๋
์์๊ฒ ์ค์ฉ์ ์ธ ์กฐ์ธ์ด๋ ํ๋ ์ง์นจ ์ ๊ณต
|
164 |
+
3. ๋
์์์ ์ํธ์์ฉ์ ์ ๋ํ๋ ์ง๋ฌธ์ด๋ call-to-action ํฌํจ
|
165 |
+
4. ์ฃผ์ ์ ๊ด๋ จ๋ ํฅํ ์ ๋ง์ด๋ ์ถ์ธ ๊ฐ๋จํ ์ธ๊ธ
|
166 |
+
|
167 |
+
##[์ต์ ํ ์ ๋ต]
|
168 |
+
###[SEO ์ต์ ํ]
|
169 |
+
1. ์ฃผ์ ์ ๊ด๋ จ๋ ํค์๋๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ํฌํจ (ํค์๋ ๋ฐ๋ 2-3% ์ ์ง)
|
170 |
+
2. ๊ฒ์ ์๋์ ๋ถํฉํ๋ ํฌ๊ด์ ์ธ ๋ด์ฉ ๊ตฌ์ฑ
|
171 |
+
|
172 |
+
###[๊ฐ๋
์ฑ ํฅ์]
|
173 |
+
1. ๋ช
ํํ ์์ ๋ชฉ๊ณผ ๋จ๋ฝ ๊ตฌ๋ถ ์ฌ์ฉ
|
174 |
+
2. ํ์์ ๋ฒํธ ๋งค๊ธฐ๊ธฐ๋ ๊ธ๋จธ๋ฆฌ ๊ธฐํธ ์ฌ์ฉ
|
175 |
+
|
176 |
+
##[์ฃผ์์ฌํญ]
|
177 |
+
1. ์ฌ๋ฌ๊ฐ์ ์ ํ๋ธ ๋๋ณธ์ค ํ๋์ ์น์ฐ์น ๋ด์ฉ ๊ธ์ง, ๊ฐ๊ด์ ์ด๊ณ ๊ณต์ ํ ์ ๋ณด ์ ๊ณต
|
178 |
+
2. ์ต์ ์ ๋ณด ์ฌ์ฉ, ์์ฑ ์์ ๋ช
์
|
179 |
+
3. ๋ณต์กํ ์ ๋ฌธ ์ฉ์ด๋ ๊ฐ๋
์ ์ผ๋ฐ ๋
์๋ ์ดํดํ ์ ์๊ฒ ์ฝ๊ฒ ์ค๋ช
|
180 |
+
4. ์ ํ๋ธ ๊ด๋ จ ํํ ์ ๊ฑฐ ๋ฐ ๋ธ๋ก๊ทธ ํ์์ ๋ง๊ฒ ์กฐ์
|
181 |
+
5. ์ ํ๋ธ ํน์ ์ฉ์ด(์: '๊ตฌ๋
', '์ข์์', '์๋ฆผ', '๋ค์ ์์' ๋ฑ) ์ฌ์ฉ ๊ธ์ง
|
182 |
+
6. '์ ํ๋ฒ', 'YouTuber' ๋ฑ์ ํํ์ '์ ์์' ๋๋ '์งํ์' ๊ฐ์ ๋ค๋ฅธ ํํ์ผ๋ก ๋์ฒด
|
183 |
+
7. ์ฑ๋๋ช
, ์ ์์ ์ค๋ช
๋ฑ ๊ฐ์ธ ์ ๋ณด ์ ์ธ
|
184 |
+
"""
|
185 |
+
elif category == "1๊ฐ ์ํ ์ถ์ฒํ":
|
186 |
+
return """
|
187 |
+
#์ ํ๋ธ ๋๋ณธ์ ๋ธ๋ก๊ทธ ํฌ์คํ
์ผ๋ก ๋ณํํ๋ ๊ท์น(์ถ์ฒํ_v4)
|
188 |
+
##[๊ธฐ๋ณธ ๊ท์น]
|
189 |
+
1. ํ๊ตญ๏ฟฝ๏ฟฝ๋ก ์์ฑํ๋, ์ฝ๊ณ ์์ฐ์ค๋ฌ์ด ํํ ์ฌ์ฉ
|
190 |
+
2. ์ฌ๋ฌ ์ ํ๋ธ ๋๋ณธ์ ๋ด์ฉ์ ์ข
ํฉํ์ฌ ํ๋์ ์ํ์ ์ง์ค๋ ์ถ์ฒ ๋ธ๋ก๊ทธ ๊ธ๋ก ์ฌ๊ตฌ์ฑ
|
191 |
+
3. ์ต์ข
๊ธ์ ๊ธธ์ด๋ 3000์ ์ด์์ผ๋ก ์์ฑ
|
192 |
+
4. ์ถ์ฒ ์ ๋ชฉ, ๋์
๋ถ, ๋ณธ๋ก , ๊ฒฐ๋ก ์ ๊ตฌ์กฐ๋ก ์์ฑ
|
193 |
+
5. ์ฃผ์ ์ ๋ง๋ ๋
์ฐฝ์ ์ธ ๊ฐ์ ํ์ ๋๋ค์์ ์ฌ์ฉํ์ฌ ์์ฑ
|
194 |
+
6. ์ ๋ฌธ์ฑ๊ณผ ๊ฐ๊ด์ฑ์ ๊ฐ์ถ ํค์ผ๋ก ์์ฑ
|
195 |
+
|
196 |
+
##[ํฌ์คํ
๊ตฌ์กฐ]
|
197 |
+
###[์ถ์ฒ ์ ๋ชฉ]
|
198 |
+
1. ์ ํ์ ํต์ฌ ์ฅ์ ์ด๋ ํน์ง์ ๊ฐ์กฐํ๋ ์ ๋ชฉ
|
199 |
+
2. ๋
์์ ํธ๊ธฐ์ฌ์ ์๊ทนํ๋ ์ง๋ฌธํ ์ ๋ชฉ
|
200 |
+
3. ์ ํ์ ํ์ ์ฑ์ด๋ ์ฐจ๋ณ์ ์ ๋ถ๊ฐ์ํค๋ ์ ๋ชฉ
|
201 |
+
4. ์ถ์ฒ์ ๋ชฉ 3๊ฐ์ง๋ง ์ถ๋ ฅํ๋ผ(๋ค๋ฅธ๊ตฌ์กฐ, ์ค๋ช
์ถ๋ ฅ๊ธ์ง)
|
202 |
+
|
203 |
+
###[๋์
๋ถ]
|
204 |
+
1. ์ ํ์ ์ฃผ์ ํน์ง๊ณผ ์์ฅ์์์ ์์น ์๊ฐ
|
205 |
+
2. ๋
์์ ๊ด์ฌ์ ๋๋ ์์(๋ฌธ์ ์ ๊ธฐ, ํฅ๋ฏธ๋ก์ด ์ฌ์ค ๋ฑ) ํฌํจ
|
206 |
+
3. ๋ฆฌ๋ทฐ์ ์ฃผ์ ๋ด์ฉ ๊ฐ๋ตํ ์๊ณ
|
207 |
+
|
208 |
+
###[๋ณธ๋ก ]
|
209 |
+
- ๋ค์ ์์๋ค์ ์ฃผ์ ์ ๋ง๊ฒ ์ ํ์ ์ผ๋ก ํฌํจํ๊ณ ๋ง๋ ์ฃผ์ ๊ฐ ์๋ค๋ฉด ์ ํฉํ ์ฃผ์ ๋ฅผ ์์ฑํ๋ผ
|
210 |
+
- ๋จ, ์ถฉ๋ถํ ์(3000-4000์)์ ๊ธ์ด ์์ฑ๋ ์ ์๋๋ก ์น์
์ ์ค์ ํ๋ผ.
|
211 |
+
- ๊ฐ ์น์
์ ๋ช
ํํ ์์ ๋ชฉ์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํ๊ณ , ์ ๋ณด์ ์ค์๋์ ๋ฐ๋ผ ๋ด์ฉ์ ๊น์ด์ ์์, ์์ ๋ชฉ ์กฐ์ ํ๋ผ
|
212 |
+
1. ์ ํ ๊ฐ์
|
213 |
+
- ๊ธฐ๋ณธ ์คํ ๋ฐ ์ฃผ์ ๊ธฐ๋ฅ ์ค๋ช
|
214 |
+
- ๊ฒฝ์ ์ ํ๊ณผ์ ์ฐจ๋ณ์ ๊ฐ์กฐ
|
215 |
+
|
216 |
+
2. ๋์์ธ ๋ฐ build quality
|
217 |
+
- ์ธ๊ด ๋์์ธ ๋ฐ ๋ง๊ฐ ํ์ง ํ๊ฐ
|
218 |
+
- ๋ฌด๊ฒ, ํฌ๊ธฐ ๋ฑ ํด๋์ฑ ๊ด๋ จ ์ ๋ณด
|
219 |
+
|
220 |
+
3. ์ฑ๋ฅ ๋ถ์
|
221 |
+
- ๋ฒค์น๋งํฌ ํ
์คํธ ๊ฒฐ๊ณผ ์์ธ ์ค๋ช
(ํ์์ ๊ทธ๋ํ๋ ํ ํ์ฉ)
|
222 |
+
- ์ค์ ์ฌ์ฉ ๊ฒฝํ ๊ธฐ๋ฐ์ ์ฑ๋ฅ ํ๊ฐ
|
223 |
+
- ๋ฐ์ด ๋ฐ ์์ ๊ด๋ จ ์ ๋ณด
|
224 |
+
|
225 |
+
4. ๋ฐฐํฐ๋ฆฌ ์ฑ๋ฅ
|
226 |
+
- ๋ฐฐํฐ๋ฆฌ ์ง์ ์๊ฐ ํ
์คํธ ๊ฒฐ๊ณผ
|
227 |
+
- ์ถฉ์ ์๋ ๋ฐ ๋ฐฐํฐ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ ์ค๋ช
|
228 |
+
|
229 |
+
5. ํน์ ๊ธฐ๋ฅ ๋ฐ ์ํํธ์จ์ด
|
230 |
+
- AI ๊ธฐ๋ฅ ๋ฑ ์ ํ๋ง์ ํน๋ณํ ๊ธฐ๋ฅ ์์ธ ์ค๋ช
|
231 |
+
- ์ ์กฐ์ฌ ์ ์ฉ ์ํํธ์จ์ด์ ์ ์ฉ์ฑ ํ๊ฐ
|
232 |
+
|
233 |
+
6. ์ฌ์ฉ ๊ฒฝํ
|
234 |
+
- ํค๋ณด๋, ํธ๋ํจ๋, ๋์คํ๋ ์ด ๋ฑ ์ฌ์ฉ๊ฐ ํ๊ฐ
|
235 |
+
- ์ผ์์ ์ธ ์์
๋ฐ ํน์ํ ์ํฉ์์์ ์ฌ์ฉ ๊ฒฝํ ๊ณต์
|
236 |
+
|
237 |
+
7. ํธํ์ฑ ๋ฐ ํ์ฅ์ฑ
|
238 |
+
- ์ํํธ์จ์ด ํธํ์ฑ ์ด์ ์ค๋ช
|
239 |
+
- ํฌํธ ๋ฐ ์ฐ๊ฒฐ์ฑ ๊ด๋ จ ์ ๋ณด
|
240 |
+
|
241 |
+
8. ๊ฐ๊ฒฉ ๋ฐ ๊ฒฝ์๋ ฅ
|
242 |
+
- ๊ฐ๊ฒฉ๋ ๋น ์ฑ๋ฅ ํ๊ฐ
|
243 |
+
- ์ ์ฌ ์ ํ๊ณผ์ ๋น๊ต ๋ถ์
|
244 |
+
|
245 |
+
###[๊ฒฐ๋ก ]
|
246 |
+
1. ์ ํ์ ํต์ฌ ์ฅ๋จ์ ์์ฝ
|
247 |
+
2. ์ ํฉํ ์ฌ์ฉ์ ์ ํ ์ ์
|
248 |
+
3. ์ต์ข
์ถ์ฒ ์๊ฒฌ ๋ฐ ๊ตฌ๋งค ์กฐ์ธ
|
249 |
+
|
250 |
+
##[์ต์ ํ ์ ๋ต]
|
251 |
+
1. SEO ์ต์ ํ
|
252 |
+
- ์ ํ๋ช
, ์ฃผ์ ๊ธฐ๋ฅ, ์ฑ๋ฅ ๊ด๋ จ ํค์๋ ์์ฐ์ค๋ฝ๊ฒ ํฌํจ
|
253 |
+
- ๊ฒ์ ์๋์ ๋ถํฉํ๋ ํฌ๊ด์ ์ธ ๋ด์ฉ ๊ตฌ์ฑ
|
254 |
+
2. ๊ฐ๋
์ฑ ํฅ์
|
255 |
+
- ๋ช
ํํ ์์ ๋ชฉ ์ฌ์ฉ์ผ๋ก ์ ๋ณด ๊ตฌ๋ถ
|
256 |
+
- ์ค์ ์ ๋ณด๋ ๊ตต์ ๊ธ์จ๋ ๊ธฐ์ธ์๊ผด๋ก ๊ฐ์กฐ
|
257 |
+
- ํ์์ ํ๋ ์ฐจํธ ํ์ฉํ์ฌ ์ ๋ณด ์๊ฐํ
|
258 |
+
3. ๋
์ ์ฐธ์ฌ ์ ๋
|
259 |
+
- ์ ํ ์ฌ์ฉ ๊ฒฝํ์ด๋ ์๊ฒฌ์ ๋ฌป๋ ์ง๋ฌธ ํฌํจ
|
260 |
+
- ์ถ๊ฐ ์ ๋ณด๋ ๋ฆฌ์์ค์ ๋ํ ์๋ด ์ ๊ณต
|
261 |
+
|
262 |
+
##[์ฃผ์์ฌํญ]
|
263 |
+
1. ๊ฐ๊ด์ ์ด๊ณ ๊ณต์ ํ ๋ฆฌ๋ทฐ ์ ๊ณต, ๊ณผ๋ํ ํ๋ณด์ฑ ํํ ์์
|
264 |
+
2. ํ
์คํธ ํ๊ฒฝ ๋ฐ ์กฐ๊ฑด์ ๋ช
ํํ ๋ช
์
|
265 |
+
3. ๊ฐ๊ฒฉ ์ ๋ณด ๋ฑ์ ์์ฑ ์์ ๊ธฐ์ค์์ ๋ช
์
|
266 |
+
4. ์ ํ๋ธ ๊ด๋ จ ํํ ์ ๊ฑฐ ๋ฐ ๋ธ๋ก๊ทธ ํ์์ ๋ง๊ฒ ์กฐ์
|
267 |
+
5. ์ ๋ฌธ ์ฉ์ด๋ ๊ธฐ์ ์ ํน์ง ์ค๋ช
์ ์ผ๋ฐ ๋
์๋ ์ดํดํ ์ ์๋๋ก ์ฝ๊ฒ ํ์ด์ ์ค๋ช
|
268 |
+
6. ์ ํ์ ํ๊ณ์ ์ด๋ ๊ฐ์ ์ด ํ์ํ ๋ถ๋ถ๋ ๊ท ํ์๊ฒ ๋ค๋ฃธ
|
269 |
+
"""
|
270 |
+
elif category == "ํ๋ ์ด์
ํ":
|
271 |
+
return """
|
272 |
+
#์ ํ๋ธ ๋๋ณธ์ ๋ธ๋ก๊ทธ ํฌ์คํ
์ผ๋ก ๋ณํํ๋ ๊ท์น(ํ๋ ์ด์
ํ_v3)
|
273 |
+
##[๊ธฐ๋ณธ ๊ท์น]
|
274 |
+
1. ํ๊ตญ์ด๋ก ์์ฑํ๋, ์ฝ๊ณ ์์ฐ์ค๋ฌ์ด ํํ ์ฌ์ฉํ๋ผ
|
275 |
+
2. ์ฌ๋ฌ ์ ํ๋ธ ๋๋ณธ์ ๋ด์ฉ์ ์ข
ํฉํ์ฌ ํ๋์ ์ฃผ์ ์ ๋ํ ๋ค์ํ ์ํ ์ถ์ฒ ๋ธ๋ก๊ทธ ๊ธ๋ก ์ฌ๊ตฌ์ฑ
|
276 |
+
3. ๋ฐ๋์ ๊ฐ ์น์
์ ์ต์ 400์ ์ด์ ์์ฑํ๊ณ ์ต์ข
๊ธ์ ๊ธธ์ด๋ 3000์ ์ด์์ผ๋ก ์์ฑ
|
277 |
+
4. ์ถ์ฒ ์ ๋ชฉ, ๋์
๋ถ, ๋ณธ๋ก (์ ํ ์ ํ ๋น๊ต, ์ ์ ๊ธฐ์ค, ์ถ์ฒ ์ํ ๋ฆฌ์คํธ), ๊ฒฐ๋ก ์ ๊ตฌ์กฐ๋ก ์์ฑ
|
278 |
+
5. ์ฃผ์ ์ ๋ง๋ ๋
์ฐฝ์ ์ธ ๊ฐ์ ํ์ ๋๋ค์์ ์ฌ์ฉํ์ฌ ์์ฑ
|
279 |
+
6. ๊ฐ๊ด์ ์ด๊ณ ์ ๋ณด ์ ๊ณต์ ์ค์ ์ ๋ ํค์ผ๋ก ์์ฑ
|
280 |
+
|
281 |
+
##[ํฌ์คํ
๊ตฌ์กฐ]
|
282 |
+
###[์ถ์ฒ ์ ๋ชฉ]
|
283 |
+
1. ์ถ์ฒ์ ๋ชฉ 3๊ฐ์ง๋ง ์ถ๋ ฅํ๋ผ(๋ค๋ฅธ๊ตฌ์กฐ, ์ค๋ช
์ถ๋ ฅ๊ธ์ง)
|
284 |
+
2. ๋
์์ ํธ๊ธฐ์ฌ์ ์๊ทนํ๋ ํฅ๋ฏธ๋ก์ด ์ ๋ชฉ ์ฌ์ฉ
|
285 |
+
3. ์ ํ์ ํต์ฌ ๊ฐ์น๋ ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ์ ๊ฐ์กฐํ๋ ์ ๋ชฉ
|
286 |
+
4. ๋น๊ต๋ ๋์กฐ๋ฅผ ํ์ฉํ ์ ๋ชฉ
|
287 |
+
5. ์ง๋ฌธ ํ์์ด๋ ๋์ ์ ์ธ ๋ฌธ๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ๋ชฉ
|
288 |
+
6. ์ซ์๋ ์์๋ฅผ ํ์ฉํ ์ ๋ชฉ (ํ์์)
|
289 |
+
7. ๋
์์ธต์ ๋ช
ํํ ํ๋ ์ ๋ชฉ
|
290 |
+
8. "Best X" ๋๋ "Top Y" ํ์์ ์ ๋ชฉ๋ ์ ์ ํ ์ฌ์ฉํ๋ผ
|
291 |
+
9. ๋
์์ ๊ด์ฌ์ ๋ ์ ์๋ ํฅ๋ฏธ๋ก์ด ์ ๋ชฉ
|
292 |
+
|
293 |
+
###[๋์
๋ถ]
|
294 |
+
1. ์ถ์ฒ ์ฃผ์ ์ ํ์์ฑ๊ณผ ์ ํ์ ์ด๋ ค์ ์๊ฐ
|
295 |
+
2. ๊ธ์ ๋ชฉ์ ์ค๋ช
(์ ํ ์ ํ ๋น๊ต ๋ฐ ์ถ์ฒ ์ ํ ์๊ฐ)
|
296 |
+
3. ๋
์์ ๊ด์ฌ์ ๋๋ ์์ ํฌํจ (์: ๊ณ์ ์ ์์ธ, ์ํ ๊ฐ์ ํจ๊ณผ ๋ฑ)
|
297 |
+
|
298 |
+
###[๋ณธ๋ก ]
|
299 |
+
- ๋ค์ ์์๋ค์ ์ฃผ์ ์ ๋ง๊ฒ ์ ํ์ ์ผ๋ก ํฌํจํ๊ณ ๋ง๋ ์ฃผ์ ๊ฐ ์๋ค๋ฉด ์ ํฉํ ์ฃผ์ ๋ฅผ ์์ฑํ๋ผ
|
300 |
+
- ๋จ, ์ถฉ๋ถํ ์(3000-4000์)์ ๊ธ์ด ์์ฑ๋ ์ ์๋๋ก ์น์
์ ์ค์ ํ๋ผ.
|
301 |
+
- ๊ฐ ์น์
์ ๋ช
ํํ ์์ ๋ชฉ์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํ๊ณ , ์ ๋ณด์ ์ค์๋์ ๋ฐ๋ผ ๋ด์ฉ์ ๊น์ด์ ์์ ์กฐ์
|
302 |
+
1. ์ ํ ์ ํ๋ณ ๋น๊ต
|
303 |
+
- ๊ฐ ์ ํ์ ์ฅ๋จ์ ๋ถ์
|
304 |
+
- ์ฌ์ฉ ํ๊ฒฝ์ ๋ฐ๋ฅธ ์ ํฉ์ฑ ์ค๋ช
|
305 |
+
|
306 |
+
2. ์ ํ ์ ์ ๊ธฐ์ค ์์ธ ์ค๋ช
|
307 |
+
- ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ์ฑ๋ฅ ์ค๋ช
|
308 |
+
- ์ฌ์ฉ ํธ์์ฑ ๊ณ ๋ ค ์ฌํญ
|
309 |
+
- ๊ฐ๊ฒฉ ๋ฐ ์ ์ง ๋น์ฉ ๋ถ์
|
310 |
+
|
311 |
+
3. ์ถ์ฒ ์ ํ ๋ฆฌ์คํธ (3-5๊ฐ)
|
312 |
+
- ์ ํ๋ช
๊ณผ ํต์ฌ ํน์ง ์๊ฐ
|
313 |
+
- ๊ฐ ์ ํ์ ์ฅ๋จ์ ์์ธ ์ค๋ช
|
314 |
+
- ์ ํฉํ ์ฌ์ฉ์ ์ ํ ์ ์
|
315 |
+
|
316 |
+
4. ๋ธ๋๋ ๋ฐ ๋ชจ๋ธ ๋ผ์ธ์
์ค๋ช
(ํ์์)
|
317 |
+
- ์ฃผ์ ๋ธ๋๋์ ์ ํ ๋ผ์ธ ์๊ฐ
|
318 |
+
- ๋ชจ๋ธ๋ณ ์ฐจ์ด์ ๋ฐ ํน์ง ์ค๋ช
|
319 |
+
|
320 |
+
###[๊ฒฐ๋ก ]
|
321 |
+
1. ์ถ์ฒ ์ ํ ์์ฝ ๋ฐ ์ต์ข
์ ํ ๊ฐ์ด๋
|
322 |
+
2. ๊ตฌ๋งค ์ ๊ณ ๋ คํด์ผ ํ ์ถ๊ฐ ์ฌํญ ์๋ด
|
323 |
+
3. ํฅํ ๊ธฐ์ ๋ฐ์ ๋ฐฉํฅ์ด๋ ํธ๋ ๋ ์ ์ (์์ ๊ฒฝ์ฐ)
|
324 |
+
|
325 |
+
##[์ต์ ํ ์ ๋ต]
|
326 |
+
1. SEO ์ต์ ํ
|
327 |
+
- ์ถ์ฒ ์ฃผ์ ์ ๊ด๋ จ๋ ์ฃผ์ ํค์๋๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ํฌํจ
|
328 |
+
- ๊ฒ์ ์๋์ ๋ถํฉํ๋ ํฌ๊ด์ ์ธ ๋ด์ฉ ๊ตฌ์ฑ
|
329 |
+
2. ๊ฐ๋
์ฑ ํฅ์
|
330 |
+
- ๊ฐ๊ฒฐํ๊ณ ๋ช
ํํ ๋ฌธ์ฅ ์ฌ์ฉ
|
331 |
+
- ์ ์ ํ ๋จ๋ฝ ๊ตฌ๋ถ๊ณผ ๋ฒํธ ๋งค๊ธฐ๊ธฐ ํ์ฉ
|
332 |
+
- ํ์์ ํ๋ ์ฐจํธ ํ์ฉํ์ฌ ์ ๋ณด ์๊ฐํ
|
333 |
+
3. ๋
์ ์ฐธ์ฌ ์ ๋
|
334 |
+
- ๋
์์ ๊ฒฝํ์ด๋ ์๊ฒฌ์ ๋ฌป๋ ์ง๋ฌธ ํฌํจ
|
335 |
+
- ๊ด๋ จ ์ ๋ณด๋ ์ถ๊ฐ ๋ฆฌ์์ค์ ๋ํ ์๋ด ์ ๊ณต
|
336 |
+
|
337 |
+
##[์ฃผ์์ฌํญ]
|
338 |
+
1. ๊ฐ๊ด์ ์ด๊ณ ๊ณต์ ํ ๋น๊ต ๋ถ์ ์ ๊ณต
|
339 |
+
2. ๊ณผ๋ํ ํ๋ณด์ฑ ํํ ์์
|
340 |
+
3. ๊ฐ๊ฒฉ ์ ๋ณด ๋ฑ์ ์์ฑ ์์ ๊ธฐ์ค์์ ๋ช
์
|
341 |
+
4. ์ ํ๋ธ ๊ด๋ จ ํํ ์ ๊ฑฐ ๋ฐ ๋ธ๋ก๊ทธ ํ์์ ๋ง๊ฒ ์กฐ์
|
342 |
+
5. ๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฅผ ์ํด ํน์ ๊ฐ์ธ์ ์ค๋ช
์ด๋ ์ฑ๋๋ช
์ธ๊ธ ๊ธ์ง
|
343 |
+
6. ๋ค์ํ ๋ธ๋๋์ ๊ฐ๊ฒฉ๋์ ์ ํ์ ํฌํจํ์ฌ ํธํฅ์ฑ ๋ฐฉ์ง
|
344 |
+
7. ์ ๋ฌธ ์ฉ์ด๋ ๊ธฐ์ ์ ํน์ง ์ค๋ช
์ ์ผ๋ฐ ๋
์๋ ์ดํดํ ์ ์๋๋ก ์ฝ๊ฒ ํ์ด์ ์ค๋ช
|
345 |
+
"""
|
346 |
+
|
347 |
+
# ํฌ์คํ
์คํ์ผ ํ๋กฌํํธ ํจ์
|
348 |
+
def get_style_prompt(style):
|
349 |
+
prompts = {
|
350 |
+
"์น๊ทผํ": """
|
351 |
+
#์น๊ทผํ ๋ธ๋ก๊ทธ ํฌ์คํ
์คํ์ผ ๊ฐ์ด๋
|
352 |
+
1. ํค๊ณผ ์ด์กฐ
|
353 |
+
- ๋ํํ๋ฏ ํธ์ํ๊ณ ์น๊ทผํ ๋งํฌ ์ฌ์ฉ
|
354 |
+
- ๋
์๋ฅผ "์ฌ๋ฌ๋ถ" ๋๋ "๋
์๋๋ค"๋ก ์ง์นญ
|
355 |
+
- ์ ์ ํ ์ด๋ชจ์ง๋ฅผ sparseํ๊ฒ ์ฌ์ฉํ์ฌ ์น๊ทผ๊ฐ ํํ
|
356 |
+
2. ๋ฌธ์ฅ ๋ฐ ๋ด์ฉ ๊ตฌ์ฑ
|
357 |
+
- ์งง๊ณ ๊ฐ๊ฒฐํ ๋ฌธ์ฅ ์์ฃผ๋ก ์์ฑ
|
358 |
+
- ๊ตฌ์ด์ฒด ํํ ์ฌ์ฉ (์: "~ํ์ด์", "~์ธ ๊ฒ ๊ฐ์์")
|
359 |
+
- '~๋๋ค', '~ํ์ฃ '๋ ์ฌ์ฉํ์ง ๋ง ๊ฒ.
|
360 |
+
- ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ด๋ ์ผํ๋ก ์์
|
361 |
+
- ์ค์ํ์์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ ํ ์ ๊ณต
|
362 |
+
- ๋
์์ ๊ณต๊ฐ์ ์ป์ ์ ์๋ ์ฌ๋ก ํฌํจ
|
363 |
+
3. ์ฉ์ด ๋ฐ ์ค๋ช
๋ฐฉ์
|
364 |
+
- ์ ๋ฌธ ์ฉ์ด ๋์ ์ฌ์ด ๋จ์ด๋ก ํ์ด์ ์ค๋ช
|
365 |
+
- ๋น์ ๋ ์์ ๋ฅผ ํ์ฉํ์ฌ ๋ณต์กํ ๊ฐ๋
์ค๋ช
|
366 |
+
- ์์ฌ์๋ฌธ๋ฌธ ํ์ฉํ์ฌ ๋
์์ ์ํตํ๋ ๋๋ ์ฃผ๊ธฐ
|
367 |
+
4. ๋
์์์ ์ํธ์์ฉ
|
368 |
+
- ๋
์์ ์๊ฒฌ์ ๋ฌผ์ด๋ณด๋ ์ง๋ฌธ ํฌํจ
|
369 |
+
- ๋๊ธ ๋ฌ๊ธฐ๋ฅผ ๋
๋ คํ๋ ๋ฌธ๊ตฌ ์ฌ์ฉ
|
370 |
+
5. ์ด๋ชจ์ง ํ์ฉ
|
371 |
+
- ์ฃผ์ ํฌ์ธํธ๋ ์๋ก์ด ์น์
์ ์์ํ ๋๋ง ๊ด๋ จ ์ด๋ชจ์ง ์ฌ์ฉ
|
372 |
+
- ์ ์ฒด ๊ธ์์ 3-5๊ฐ ์ ๋์ ์ด๋ชจ์ง๋ง ์ฌ์ฉํ์ฌ ๊ณผ๋ํ์ง ์๊ฒ ์ ์ง
|
373 |
+
6. ๋ง๋ฌด๋ฆฌ
|
374 |
+
- ์น๊ทผํ๊ณ ๊ฒฉ๋ คํ๋ ํค์ผ๋ก ๋ง๋ฌด๋ฆฌ
|
375 |
+
- ๋ค์ ํฌ์คํ
์ ๋ํ ๊ธฐ๋๊ฐ ์ ๋ฐ
|
376 |
+
์ฃผ์์ฌํญ: ๋๋ฌด ๊ฐ๋ฒผ์ด ํค์ ์ง์ํ๊ณ , ์ฃผ์ ์ ์ค์์ฑ์ ํด์น์ง ์๋ ์ ์์ ์น๊ทผํจ ์ ์ง
|
377 |
+
|
378 |
+
์์:
|
379 |
+
"์ฌ๋ฌ๋ถ, ์ค๋ ํ๋ฃจ๋ ์ด๋ ์
จ๋์? ๐ ์ ๋ ์ค๋ ์ฌ๋ฏธ์๋ ๊ฒฝํ์ ํ๏ฟฝ๏ฟฝ์. ๋ฐ๋ก '๋ฏธ๋๋ฉ ๋ผ์ดํ'์ ๋์ ํด๋ณธ ๊ฑด๋ฐ์. ์ฒ์์๋ ์ข ๋ง๋งํ์ง๋ง, ์๊ฐ๋ณด๋ค ์ฆ๊ฑฐ์ด ๊ฒฝํ์ด์์ด์! ์ฌ๋ฌ๋ถ๋ ํ๋ฒ ๋ฐ๋ผํด๋ณด์๊ฒ ์ด์? ์ ๊ฐ ์๊ฒ ๋ ๊ฟํ๋ค์ ํ๋ํ๋ ์๋ ค๋๋ฆด๊ฒ์.
|
380 |
+
""",
|
381 |
+
"์ผ๋ฐ":"""#์ผ๋ฐ์ ์ธ ๋ธ๋ก๊ทธ ํฌ์คํ
์คํ์ผ ๊ฐ์ด๋
|
382 |
+
1. ํค๊ณผ ์ด์กฐ
|
383 |
+
- ์ค๋ฆฝ์ ์ด๊ณ ๊ฐ๊ด์ ์ธ ํค ์ ์ง
|
384 |
+
- ์ ์ ํ ์กด๋๋ง ์ฌ์ฉ (์: "~ํฉ๋๋ค", "~์
๋๋ค")
|
385 |
+
|
386 |
+
2. ๋ด์ฉ ๊ตฌ์กฐ ๋ฐ ์ ๊ฐ
|
387 |
+
- ๋ช
ํํ ์ฃผ์ ์ ์๋ก ์์
|
388 |
+
- ๋
ผ๋ฆฌ์ ์ธ ์์๋ก ์ ๋ณด ์ ๊ฐ
|
389 |
+
- ์ฃผ์ ํฌ์ธํธ๋ฅผ ๊ฐ์กฐํ๋ ์์ ๋ชฉ ํ์ฉ
|
390 |
+
- ์ ์ ํ ๊ธธ์ด์ ๋จ๋ฝ์ผ๋ก ๊ตฌ์ฑ
|
391 |
+
|
392 |
+
3. ์ฉ์ด ๋ฐ ์ค๋ช
๋ฐฉ์
|
393 |
+
- ์ผ๋ฐ์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฌ์ด ์ฉ์ด ์ ํ
|
394 |
+
- ํ์์ ๊ฐ๋จํ ์ค๋ช
์ถ๊ฐ
|
395 |
+
- ๊ฐ๊ด์ ์ธ ์ ๋ณด ์ ๊ณต์ ์ค์
|
396 |
+
|
397 |
+
4. ํ
์คํธ ๊ตฌ์กฐํ
|
398 |
+
- ๋ถ๋ฆฟ ํฌ์ธํธ๋ ๋ฒํธ ๋งค๊ธฐ๊ธฐ๋ฅผ ํ์ฉํ์ฌ ์ ๋ณด ๊ตฌ์กฐํ
|
399 |
+
- ์ค์ํ ์ ๋ณด๋ ๊ตต์ ๊ธ์จ๋ ๊ธฐ์ธ์๊ผด๋ก ๊ฐ์กฐ
|
400 |
+
|
401 |
+
5. ๋
์ ์ํธ์์ฉ
|
402 |
+
- ์ ์ ํ ๋
์์ ์๊ฐ์ ๋ฌป๋ ์ง๋ฌธ ํฌํจ
|
403 |
+
- ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๋ ํค์๋ ์ ์
|
404 |
+
|
405 |
+
6. ๋ง๋ฌด๋ฆฌ
|
406 |
+
- ์ฃผ์ ๋ด์ฉ ๊ฐ๋จํ ์์ฝ
|
407 |
+
- ์ถ๊ฐ ์ ๋ณด์ ๋ํ ์๋ด ์ ๊ณต
|
408 |
+
|
409 |
+
์ฃผ์์ฌํญ: ๋๋ฌด ๋ฑ๋ฑํ๊ฑฐ๋ ์ง๋ฃจํ์ง ์๋๋ก ๊ท ํ ์ ์ง
|
410 |
+
|
411 |
+
์์:
|
412 |
+
"์ต๊ทผ ํ๊ฒฝ ๋ฌธ์ ๊ฐ ๋๋๋๋ฉด์ '์ ๋ก ์จ์ด์คํธ' ๋ผ์ดํ์คํ์ผ์ ๋ํ ๊ด์ฌ์ด ๋์์ง๊ณ ์์ต๋๋ค. ์ ๋ก ์จ์ด์คํธ๋ ์ผ์์ํ์์ ๋ฐ์ํ๋ ์ฐ๋ ๊ธฐ๋ฅผ ์ต์ํํ๋ ์ํ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ด ๊ธ์์๋ ์ ๋ก ์จ์ด์คํธ์ ๊ฐ๋
, ์ค์ฒ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํจ๊ณผ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ ์ ๋ก ์จ์ด์คํธ์ ์ ์๋ถํฐ ์ดํด๋ณด๋ฉด...
|
413 |
+
""",
|
414 |
+
"์ ๋ฌธ์ ์ธ": """
|
415 |
+
#์ ๋ฌธ์ ์ธ ๋ธ๋ก๊ทธ ํฌ์คํ
์คํ์ผ ๊ฐ์ด๋
|
416 |
+
|
417 |
+
1. ํค๊ณผ ๊ตฌ์กฐ
|
418 |
+
- ๊ณต์์ ์ด๊ณ ํ์ ์ ์ธ ํค ์ฌ์ฉํ๋ ์ ์ ํ ์กด๋๋ง ์ฌ์ฉ
|
419 |
+
- ๊ฐ๊ด์ ์ด๊ณ ๋ถ์์ ์ธ ์ ๊ทผ ์ ์ง
|
420 |
+
- ๋ช
ํํ ์๋ก , ๋ณธ๋ก , ๊ฒฐ๋ก ๊ตฌ์กฐ
|
421 |
+
- ์ฒด๊ณ์ ์ธ ๋
ผ์ ์ ๊ฐ
|
422 |
+
- ์ธ๋ถ ์น์
์ ์ํ ๋ช
ํํ ์์ ๋ชฉ ์ฌ์ฉ
|
423 |
+
|
424 |
+
2. ๋ด์ฉ ๊ตฌ์ฑ ๋ฐ ์ ๊ฐ
|
425 |
+
- ๋ณต์กํ ๊ฐ๋
์ ์ ํํ ์ ๋ฌํ ์ ์๋ ๋ฌธ์ฅ ๊ตฌ์กฐ ์ฌ์ฉ
|
426 |
+
- ๋
ผ๋ฆฌ์ ์ฐ๊ฒฐ์ ์ํ ์ ํ์ด ํ์ฉ
|
427 |
+
- ํด๋น ๋ถ์ผ์ ์ ๋ฌธ ์ฉ์ด ์ ๊ทน ํ์ฉ (ํ์์ ๊ฐ๋ตํ ์ค๋ช
์ ๊ณต)
|
428 |
+
- ์ฌ์ธต์ ์ธ ๋ถ์๊ณผ ๋นํ์ ์ฌ๊ณ ์ ๊ฐ
|
429 |
+
- ๋ค์ํ ๊ด์ ์ ์ ๋ฐ ๋น๊ต
|
430 |
+
|
431 |
+
3. ๋ฐ์ดํฐ ๋ฐ ๊ทผ๊ฑฐ ํ์ฉ
|
432 |
+
- ํต๊ณ, ์ฐ๊ตฌ ๊ฒฐ๊ณผ, ์ ๋ฌธ๊ฐ ์๊ฒฌ ๋ฑ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ ์ธ์ฉ
|
433 |
+
- ํ์์ ๊ฐ์ฃผ๋ ์ฐธ๊ณ ๋ฌธํ ๋ชฉ๋ก ํฌํจ
|
434 |
+
- ์์น ๋ฐ์ดํฐ๋ ํ
์คํธ๋ก ๋ช
ํํ ์ค๋ช
|
435 |
+
|
436 |
+
4. ํ
์คํธ ๊ตฌ์กฐํ
|
437 |
+
- ๋
ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์กฐํ๊ธฐ ์ํด ๋ฒํธ ๋งค๊ธฐ๊ธฐ ์ฌ์ฉ
|
438 |
+
- ํต์ฌ ๊ฐ๋
์ด๋ ์ฉ์ด๋ ๊ธฐ์ธ์๊ผด๋ก ๊ฐ์กฐ
|
439 |
+
- ๊ธด ์ธ์ฉ๋ฌธ์ ๋ค์ฌ์ฐ๊ธฐ๋ก ๊ตฌ๋ถ
|
440 |
+
|
441 |
+
5. ๋ง๋ฌด๋ฆฌ
|
442 |
+
- ํต์ฌ ๋
ผ์ ์ฌ๊ฐ์กฐ
|
443 |
+
- ํฅํ ์ฐ๊ตฌ ๋ฐฉํฅ์ด๋ ์ค๋ฌด์ ํจ์ ์ ์
|
444 |
+
|
445 |
+
์ฃผ์์ฌํญ: ์ ๋ฌธ์ฑ์ ์ ์งํ๋, ์์ ํ ์ดํดํ๊ธฐ ์ด๋ ค์ด ์์ค์ ์ง์
|
446 |
+
|
447 |
+
์์:
|
448 |
+
"๋ณธ ์ฐ๊ตฌ์์๋ ์ธ๊ณต์ง๋ฅ(AI)์ ์ค๋ฆฌ์ ํจ์์ ๋ํด ๊ณ ์ฐฐํ๋ค. ํนํ, ์์จ์ฃผํ ์๋์ฐจ์ ์์ฌ๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฆฌ์ ๋๋ ๋ง์ ์ด์ ์ ๋ง์ถ๋ค. Bonnefon et al. (2016)์ ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด, ์์จ์ฃผํ ์ฐจ๋์ ์๊ณ ๋ฆฌ์ฆ์ด ์ง๋ฉดํ ์ ์๋ ์ค๋ฆฌ์ ์ ํ์ ๋ณต์ก์ฑ์ด ์ง์ ๋ ๋ฐ ์๋ค. ๋ณธ๊ณ ์์๋ ์ด๋ฌํ ์ค๋ฆฌ์ ๋๋ ๋ง๋ฅผ ์ธ ๊ฐ์ง ์ฃผ์ ๊ด์ ์์ ๋ถ์ํ๋ค: 1) ๊ณต๋ฆฌ์ฃผ์์ ์ ๊ทผ, 2) ์๋ฌด๋ก ์ ์ ๊ทผ, 3) ๋ ์ค๋ฆฌ์ ์ ๊ทผ. ๊ฐ ์ ๊ทผ๋ฒ์ ์ฅ๋จ์ ์ ๋น๊ต ๋ถ์ํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์จ์ฃผํ ์ฐจ๋์ ์ค๋ฆฌ์ ์์ฌ๊ฒฐ์ ํ๋ ์์ํฌ๋ฅผ ์ ์ํ๊ณ ์ ํ๋ค...
|
449 |
+
"""
|
450 |
+
}
|
451 |
+
return prompts.get(style, "ํฌ์คํ
์คํ์ผ ํ๋กฌํํธ")
|
452 |
+
|
453 |
+
# ํฌ์คํ
์คํ์ผ ์ค๋ช
ํจ์
|
454 |
+
def get_style_description(style):
|
455 |
+
descriptions = {
|
456 |
+
"์น๊ทผํ": "๋
์์ ๊ฐ๊น์ด ์น๊ตฌ์ฒ๋ผ ๋ํํ๋ ๋ฏํ ์น๊ทผํ ์คํ์ผ์
๋๋ค.",
|
457 |
+
"์ผ๋ฐ": "์ผ๋ฐ์ ์ด๊ณ ์ค๋ฆฝ์ ์ธ ํค์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์คํ์ผ์
๋๋ค.",
|
458 |
+
"์ ๋ฌธ์ ์ธ": "์ ๋ฌธ๊ฐ์ ์๊ฐ์์ ๊น์ด ์๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์คํ์ผ์
๋๋ค."
|
459 |
+
}
|
460 |
+
return descriptions.get(style, "ํฌ์คํ
์คํ์ผ์ ์ ํํ์ธ์.")
|
461 |
+
|
462 |
+
# ํ๋กฌํํธ ์
๋ฐ์ดํธ ํจ์
|
463 |
+
def update_prompts_and_description(category, style):
|
464 |
+
blog_post_prompt = get_blog_post_prompt(category)
|
465 |
+
style_prompt = get_style_prompt(style)
|
466 |
+
style_description = get_style_description(style)
|
467 |
+
return blog_post_prompt, style_prompt, style_description
|
468 |
+
|
469 |
+
def format_filename(text):
|
470 |
+
text = re.sub(r'[^\w\s-]', '', text)
|
471 |
+
return text[:50].strip()
|
472 |
+
|
473 |
+
def extract_first_recommended_title(blog_post):
|
474 |
+
section_match = re.search(r'(?:#+\s*)?์ถ์ฒ\s*์ ๋ชฉ:?\s*\n([\s\S]*?)(?=\n(?:#+|$)|$)', blog_post, re.IGNORECASE)
|
475 |
+
if section_match:
|
476 |
+
section_content = section_match.group(1)
|
477 |
+
title_match = re.search(r'(?:^|\n)\s*(?:\d+\.|-|\*|\โข)?\s*(.*?)(?=\n|$)', section_content)
|
478 |
+
if title_match:
|
479 |
+
title = title_match.group(1).strip()
|
480 |
+
print(f"Extracted title: {title}")
|
481 |
+
return title
|
482 |
+
print("No title found")
|
483 |
+
return "๋ธ๋ก๊ทธ_๊ธ"
|
484 |
+
|
485 |
+
class PDF(FPDF):
|
486 |
+
def __init__(self):
|
487 |
+
super().__init__()
|
488 |
+
self.add_font("NanumGothic", "", "NanumGothic.ttf")
|
489 |
+
self.add_font("NanumGothicBold", "", "NanumGothicBold.ttf")
|
490 |
+
self.add_font("NanumGothicExtraBold", "", "NanumGothicExtraBold.ttf")
|
491 |
+
self.add_font("NanumGothicLight", "", "NanumGothicLight.ttf")
|
492 |
+
|
493 |
+
def header(self):
|
494 |
+
# ํค๋๋ฅผ ๋น์๋ก๋๋ค
|
495 |
+
pass
|
496 |
+
|
497 |
+
def footer(self):
|
498 |
+
self.set_y(-15)
|
499 |
+
self.set_font('NanumGothicLight', '', 8)
|
500 |
+
self.cell(0, 10, f'Page {self.page_no()}', 0, new_x=XPos.RIGHT, new_y=YPos.TOP, align='C')
|
501 |
+
|
502 |
+
def save_to_pdf(summary, blog_post, file_type):
|
503 |
+
pdf = PDF()
|
504 |
+
pdf.set_auto_page_break(auto=True, margin=15)
|
505 |
+
|
506 |
+
pdf.add_page()
|
507 |
+
pdf.set_font("NanumGothicExtraBold", size=16)
|
508 |
+
pdf.cell(0, 10, "์์ฝ", new_x=XPos.LMARGIN, new_y=YPos.NEXT, align='C')
|
509 |
+
pdf.ln(5)
|
510 |
+
pdf.set_font("NanumGothic", size=11)
|
511 |
+
pdf.multi_cell(0, 6, summary)
|
512 |
+
|
513 |
+
pdf.add_page()
|
514 |
+
pdf.set_font("NanumGothicExtraBold", size=16)
|
515 |
+
pdf.cell(0, 10, "๋ธ๋ก๊ทธ ๊ธ", new_x=XPos.LMARGIN, new_y=YPos.NEXT, align='C')
|
516 |
+
pdf.ln(5)
|
517 |
+
|
518 |
+
lines = blog_post.split('\n')
|
519 |
+
for line in lines:
|
520 |
+
if line.strip() == '':
|
521 |
+
pdf.ln(3) # ๋น ์ค์ ์์ ๊ฐ๊ฒฉ๋ง ์ถ๊ฐ
|
522 |
+
elif line.startswith('#'): # ์ ๋ชฉ์ผ๋ก ๊ฐ์ฃผ
|
523 |
+
pdf.set_font("NanumGothicBold", size=14)
|
524 |
+
pdf.multi_cell(0, 8, line.lstrip('#').strip())
|
525 |
+
pdf.ln(2)
|
526 |
+
elif line.startswith('##'): # ๋ถ์ ๋ชฉ์ผ๋ก ๊ฐ์ฃผ
|
527 |
+
pdf.set_font("NanumGothicBold", size=12)
|
528 |
+
pdf.multi_cell(0, 7, line.lstrip('#').strip())
|
529 |
+
pdf.ln(2)
|
530 |
+
else:
|
531 |
+
pdf.set_font("NanumGothic", size=11)
|
532 |
+
pdf.multi_cell(0, 6, line.strip())
|
533 |
+
pdf.ln(1)
|
534 |
+
|
535 |
+
title = extract_first_recommended_title(blog_post)
|
536 |
+
today_date = datetime.now().strftime("%Y%m%d")
|
537 |
+
filename = f"{today_date}_{format_filename(title)}.pdf"
|
538 |
+
|
539 |
+
print(f"Saving PDF as: {filename}")
|
540 |
+
pdf.output(filename)
|
541 |
+
return filename
|
542 |
+
|
543 |
+
# Gradio ์ธํฐํ์ด์ค์ฉ PDF ์ ์ฅ ํจ์
|
544 |
+
def save_content_to_pdf(summary, blog_post):
|
545 |
+
filename = save_to_pdf(summary, blog_post, "๋ธ๋ก๊ทธ")
|
546 |
+
return filename
|
547 |
+
|
548 |
+
# Gradio ์ธํฐํ์ด์ค ๊ตฌ์ฑ
|
549 |
+
title = "์ ํ๋ธ๋ก ๋ธ๋ก๊ทธ ๊ธ ์์ฑํ๊ธฐ"
|
550 |
+
|
551 |
+
with gr.Blocks() as demo:
|
552 |
+
gr.Markdown(f"# {title}")
|
553 |
+
|
554 |
+
# 1๋จ๊ณ: ์นดํ
๊ณ ๋ฆฌ ์ ํ
|
555 |
+
gr.Markdown("### 1๋จ๊ณ: ํฌ์คํ
์นดํ
๊ณ ๋ฆฌ๋ฅผ ์ง์ ํด์ฃผ์ธ์", elem_id="step-title")
|
556 |
+
category = gr.Radio(choices=["์ผ๋ฐํ","์ ๋ณด์ฑ", "1๊ฐ ์ํ ์ถ์ฒํ", "ํ๋ ์ด์
ํ"], label="ํฌ์คํ
์นดํ
๊ณ ๋ฆฌ", value="์ผ๋ฐํ")
|
557 |
+
|
558 |
+
# ๊ตฌ๋ถ์ ์ถ๊ฐ
|
559 |
+
gr.Markdown("---\n\n")
|
560 |
+
|
561 |
+
# 2๋จ๊ณ: ํฌ์คํ
์คํ์ผ ์ ํ
|
562 |
+
gr.Markdown("### 2๋จ๊ณ: ํฌ์คํ
์คํ์ผ์ ์ ํํด์ฃผ์ธ์", elem_id="step-title")
|
563 |
+
style = gr.Radio(choices=["์น๊ทผํ", "์ผ๋ฐ", "์ ๋ฌธ์ ์ธ"], label="ํฌ์คํ
์คํ์ผ", value="์น๊ทผํ")
|
564 |
+
style_description = gr.Markdown(f"{get_style_description('์น๊ทผํ')}", elem_id="style-description")
|
565 |
+
|
566 |
+
# ๊ตฌ๋ถ์ ์ถ๊ฐ
|
567 |
+
gr.Markdown("---\n\n")
|
568 |
+
|
569 |
+
# 3๋จ๊ณ: ์ ํ๋ธ ๋งํฌ๋ฅผ ์
๋ ฅํ์ธ์
|
570 |
+
gr.Markdown("### 3๋จ๊ณ: ์ ํ๋ธ ๋งํฌ๋ฅผ ์
๋ ฅํ์ธ์", elem_id="step-title")
|
571 |
+
with gr.Row():
|
572 |
+
youtube_url1 = gr.Textbox(label="YouTube URL 1", placeholder="์ฒซ ๋ฒ์งธ ์ ํ๋ธ ๋งํฌ๋ฅผ ์
๋ ฅํ์ธ์")
|
573 |
+
youtube_url2 = gr.Textbox(label="YouTube URL 2", placeholder="๋ ๋ฒ์งธ ์ ํ๋ธ ๋งํฌ๋ฅผ ์
๋ ฅํ์ธ์")
|
574 |
+
youtube_url3 = gr.Textbox(label="YouTube URL 3", placeholder="์ธ ๋ฒ์งธ ์ ํ๋ธ ๋งํฌ๋ฅผ ์
๋ ฅํ์ธ์")
|
575 |
+
|
576 |
+
# ์จ๊ฒจ์ง ํ
์คํธ๋ฐ์ค (์ฌ์ฉ์์๊ฒ ๋ณด์ด์ง ์์)
|
577 |
+
combined_urls = gr.Textbox(visible=False)
|
578 |
+
transcript_output = gr.Textbox(label="์ ํ๋ธ ํธ๋์คํฌ๋ฆฝํธ", lines=10)
|
579 |
+
|
580 |
+
# ์ ํ๋ธ ํธ๋์คํฌ๋ฆฝํธ ๊ฐ์ ธ์ค๊ธฐ ํจ์
|
581 |
+
def combine_and_get_transcripts(url1, url2, url3):
|
582 |
+
urls = [url for url in [url1, url2, url3] if url.strip()]
|
583 |
+
combined = ",".join(urls)
|
584 |
+
all_transcripts = []
|
585 |
+
for url in urls:
|
586 |
+
transcript = get_transcript(url.strip())
|
587 |
+
all_transcripts.append(transcript)
|
588 |
+
return combined, "\n\n---\n\n".join(all_transcripts)
|
589 |
+
|
590 |
+
# ์
๋ ฅ ๋ณ๊ฒฝ ์ ํธ๋์คํฌ๋ฆฝํธ ์
๋ฐ์ดํธ
|
591 |
+
for url_input in [youtube_url1, youtube_url2, youtube_url3]:
|
592 |
+
url_input.change(
|
593 |
+
fn=combine_and_get_transcripts,
|
594 |
+
inputs=[youtube_url1, youtube_url2, youtube_url3],
|
595 |
+
outputs=[combined_urls, transcript_output]
|
596 |
+
)
|
597 |
+
|
598 |
+
# ์์ฝ๊ธ ์์ฑํ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
|
599 |
+
gr.Markdown("### ์์ฝ๊ธ ์์ฑํ๊ธฐ", elem_id="step-title")
|
600 |
+
with gr.Accordion("๏ฟฝ๏ฟฝ๏ฟฝ์ฝ๊ธ ์ค์ ", open=False):
|
601 |
+
summary_system_message = gr.Textbox(
|
602 |
+
label="์์ฝ๊ธ ์์คํ
๋ฉ์์ง",
|
603 |
+
value="""
|
604 |
+
#์ ํ๋ธ ๋๋ณธ ์์ฝ ๊ท์น
|
605 |
+
1. ๋ชฉ์
|
606 |
+
๊ฐ. ์
๋ ฅ๋ ์ฌ๋ฌ ์ ํ๋ธ ์์ ๋๋ณธ์ ๋ถ์ํ์ฌ ํ๋์ ์ข
ํฉ์ ์ธ ์์ฝ ๋ณด๊ณ ์ ์์ฑ
|
607 |
+
๋. ํต์ฌ ๋ด์ฉ์ ์ฝ๊ฒ ํ์
ํ ์ ์๋๋ก ๊ตฌ์กฐํ๋ ํ์์ผ๋ก ์ ์
|
608 |
+
๋ค. ๊ณตํต ์ฃผ์ ๋ ์ฐ๊ด์ฑ ์๋ ๋ด์ฉ์ ์ค์ฌ์ผ๋ก ํตํฉ๋ ์ธ์ฌ์ดํธ ์ ๊ณต
|
609 |
+
|
610 |
+
2. ๊ตฌ์กฐ ๋ฐ ํ์
|
611 |
+
๊ฐ. ์ ์ฒด ๊ตฌ์กฐ
|
612 |
+
- ์ฃผ์ ํฌ์ธํธ๋ฅผ ๋
ผ๋ฆฌ์ ์น์
์ผ๋ก ๊ตฌ๋ถํ์ฌ ์์ฑ
|
613 |
+
- ๊ฐ ์น์
์ ๋ช
ํํ๊ณ ๊ฐ๊ฒฐํ ์์ ๋ชฉ ๋ถ์ฌ
|
614 |
+
๋. ๋งํฌ๋ค์ด ํ์ ์ฌ์ฉ
|
615 |
+
- ์น์
๊ตฌ๋ถ์ ์ํด '1.', '2.' ๋ฑ์ ์ซ์ ์ฌ์ฉ
|
616 |
+
- ํ์ ํญ๋ชฉ์ '๊ฐ.', '๋.' ๋ฑ์ ํ๊ธ ๋ฌธ์ ์ฌ์ฉ
|
617 |
+
๋ค. ๊ฐ๋
์ฑ ํฅ์
|
618 |
+
- ๊ฐ๊ฒฐํ ๋ฌธ์ฅ๊ณผ ๋จ๋ฝ ์ฌ์ฉํ๋ ๋ณธ๋ฌธ์ ๋ด์ฉ์ ์์ธํ ์์ฑ
|
619 |
+
- ํ์์ ๋ถ๋ฆฟ ํฌ์ธํธ ํ์ฉํ์ฌ ์ ๋ณด ๋์ด
|
620 |
+
|
621 |
+
3. ๋ด์ฉ ๊ตฌ์ฑ
|
622 |
+
๊ฐ. ์ข
ํฉ ๊ฐ์
|
623 |
+
- ๋ถ์ํ ์์๋ค์ ๊ณตํต ์ฃผ์ ๋๋ ํต์ฌ ๋ฉ์์ง ์๊ฐ
|
624 |
+
- ๊ฐ ์์์ ์ฃผ์ ํฌ์ธํธ๋ฅผ ๊ฐ๋ตํ ๋์ด
|
625 |
+
๋. ์ฃผ์ ๋ณ ํตํฉ ๋ถ์
|
626 |
+
- ๊ณตํต ์ฃผ์ ๋ ์ฐ๊ด์ฑ ์๋ ๋ด์ฉ์ ์ค์ฌ์ผ๋ก ์น์
๊ตฌ์ฑ
|
627 |
+
- ๊ฐ ์์์ ๊ด์ ์ด๋ ์ ๋ณด๋ฅผ ๋น๊ต/๋์กฐํ๋ฉฐ ์ข
ํฉ
|
628 |
+
๋ค. ๋
ํนํ ์ธ์ฌ์ดํธ
|
629 |
+
- ๊ฐ ์์์์ ์ ์๋ ๊ณ ์ ํ ๊ด์ ์ด๋ ์ ๋ณด ๊ฐ์กฐ
|
630 |
+
๋ผ. ๋ฐ์ดํฐ ๋ฐ ์์ ํตํฉ
|
631 |
+
- ์ฌ๋ฌ ์์์์ ์ ์๋ ๋ฐ์ดํฐ๋ ์์๋ฅผ ์ข
ํฉํ์ฌ ์ ์
|
632 |
+
๋ง. ์ข
ํฉ ๊ฒฐ๋ก
|
633 |
+
- ๋ถ์๋ ๋ชจ๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ ์ฒด์ ์ธ ๊ฒฐ๋ก ๋์ถ
|
634 |
+
|
635 |
+
4. ์ฉ์ด ๋ฐ ํํ
|
636 |
+
๊ฐ. '์ ํ๋ฒ', 'YouTuber' ๋ฑ์ ํํ์ '์ ์์' ๋๋ '์งํ์' ๊ฐ์ ๋ค๋ฅธ ํํ์ผ๋ก ๋์ฒด
|
637 |
+
๋. ์ฑ๋๋ช
, ์ ์์ ์ค๋ช
๋ฑ ๊ฐ์ธ ์ ๋ณด ์ ์ธ
|
638 |
+
๋ค. ์ ํ๋ธ ํน์ ์ฉ์ด(์: '๊ตฌ๋
', '์ข์์', '์๋ฆผ', '๋ค์ ์์' ๋ฑ) ์ฌ์ฉ ๊ธ์ง
|
639 |
+
|
640 |
+
5. ๊ฐ๊ด์ฑ ๋ฐ ์ ํ์ฑ
|
641 |
+
๊ฐ. ๋๋ณธ ๋ด์ฉ์ ๊ฐ๊ด์ ์ผ๋ก ์์ฝ, ๊ฐ์ธ์ ํด์ ์ต์ํ
|
642 |
+
๋. ์ฌ์ค ๊ด๊ณ๋ ๋ฐ์ดํฐ๋ ๊ฐ๋ฅํ ์๋ฌธ ๊ทธ๋๋ก ์ ๋ฌ
|
643 |
+
|
644 |
+
6. ๋ง๋ฌด๋ฆฌ
|
645 |
+
๊ฐ. ์์ฝ์ ๋์ ์ ์ฒด ๋ด์ฉ์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌ
|
646 |
+
๋. ํ์์ ์ถ๊ฐ ์ ๋ณด๋ ๊ด๋ จ ์ฃผ์ ์ ์
|
647 |
+
""",
|
648 |
+
lines=15,
|
649 |
+
visible=True
|
650 |
+
)
|
651 |
+
summary_max_tokens = gr.Slider(label="Max Tokens", minimum=1000, maximum=7000, value=5000, step=1000)
|
652 |
+
summary_temperature = gr.Slider(label="Temperature", minimum=0.1, maximum=1.0, value=0.7, step=0.05)
|
653 |
+
summary_top_p = gr.Slider(label="Top P", minimum=0.1, maximum=1.0, value=0.95, step=0.05)
|
654 |
+
|
655 |
+
summarize_btn = gr.Button("์์ฝ๊ธ ์์ฑํ๊ธฐ")
|
656 |
+
summary_output = gr.Textbox(label="์์ฝ๋ ๊ธ", lines=10)
|
657 |
+
|
658 |
+
def generate_summary(transcript, system_message, max_tokens, temperature, top_p):
|
659 |
+
summary = summarize_transcript(transcript, system_message, max_tokens, temperature, top_p)
|
660 |
+
return summary
|
661 |
+
|
662 |
+
summarize_btn.click(
|
663 |
+
fn=generate_summary,
|
664 |
+
inputs=[transcript_output, summary_system_message, summary_max_tokens, summary_temperature, summary_top_p],
|
665 |
+
outputs=[summary_output]
|
666 |
+
)
|
667 |
+
|
668 |
+
# ๊ตฌ๋ถ์ ์ถ๊ฐ
|
669 |
+
gr.Markdown("---\n\n")
|
670 |
+
|
671 |
+
# 4๋จ๊ณ: ๊ธ ์์ฑํ๊ธฐ
|
672 |
+
gr.Markdown("### 4๋จ๊ณ: ๊ธ ์์ฑํ๊ธฐ", elem_id="step-title")
|
673 |
+
gr.HTML("<span style='color: grey;'>[์์ฑํ๊ธฐ ๋ฒํผ์ ์ ํํด์ฃผ์ธ์]</span>")
|
674 |
+
|
675 |
+
with gr.Accordion("๋ธ๋ก๊ทธ ๊ธ ์ค์ ", open=False):
|
676 |
+
blog_system_message = gr.Textbox(label="์นดํ
๊ณ ๋ฆฌ ํ๋กฌํํธ", value=get_blog_post_prompt("์ผ๋ฐํ"), lines=20, visible=True)
|
677 |
+
style_prompt_hidden = gr.Textbox(label="์คํ์ผ ํ๋กฌํํธ", value=get_style_prompt("์น๊ทผํ"), lines=10, visible=False) # ์ด๊ธฐ๊ฐ ์ค์
|
678 |
+
blog_max_tokens = gr.Slider(label="Max Tokens", minimum=1000, maximum=12000, value=8000, step=1000)
|
679 |
+
blog_temperature = gr.Slider(label="Temperature", minimum=0.1, maximum=1.0, value=0.8, step=0.1)
|
680 |
+
blog_top_p = gr.Slider(label="Top P", minimum=0.1, maximum=1.0, value=0.95, step=0.05)
|
681 |
+
|
682 |
+
generate_btn = gr.Button("๋ธ๋ก๊ทธ ๊ธ ์์ฑํ๊ธฐ")
|
683 |
+
blog_output = gr.Textbox(label="์์ฑ๋ ๋ธ๋ก๊ทธ ๊ธ", lines=30)
|
684 |
+
|
685 |
+
def generate_blog_content(category, style, transcripts, category_prompt, style_prompt, max_tokens, temperature, top_p):
|
686 |
+
blog_post = generate_blog_post(category, style, transcripts, category_prompt, style_prompt, max_tokens, temperature, top_p)
|
687 |
+
return blog_post
|
688 |
+
|
689 |
+
generate_btn.click(
|
690 |
+
fn=generate_blog_content,
|
691 |
+
inputs=[category, style, transcript_output, blog_system_message, style_prompt_hidden, blog_max_tokens, blog_temperature, blog_top_p],
|
692 |
+
outputs=[blog_output]
|
693 |
+
)
|
694 |
+
|
695 |
+
# PDF ์ ์ฅ ๋ฒํผ ์ถ๊ฐ
|
696 |
+
save_pdf_btn = gr.Button("PDF๋ก ์ ์ฅํ๊ธฐ")
|
697 |
+
pdf_output = gr.File(label="์์ฑ๋ PDF ํ์ผ")
|
698 |
+
|
699 |
+
save_pdf_btn.click(
|
700 |
+
fn=save_content_to_pdf,
|
701 |
+
inputs=[summary_output, blog_output],
|
702 |
+
outputs=[pdf_output]
|
703 |
+
)
|
704 |
+
|
705 |
+
# ์นดํ
๊ณ ๋ฆฌ์ ์คํ์ผ์ด ๋ณ๊ฒฝ๋ ๋ ํ๋กฌํํธ ์
๋ฐ์ดํธ
|
706 |
+
def update_prompts_and_description(category, style):
|
707 |
+
blog_post_prompt = get_blog_post_prompt(category)
|
708 |
+
style_prompt = get_style_prompt(style)
|
709 |
+
style_description = get_style_description(style)
|
710 |
+
return blog_post_prompt, style_prompt, style_description
|
711 |
+
|
712 |
+
category.change(fn=update_prompts_and_description, inputs=[category, style], outputs=[blog_system_message, style_prompt_hidden, style_description])
|
713 |
+
style.change(fn=update_prompts_and_description, inputs=[category, style], outputs=[blog_system_message, style_prompt_hidden, style_description])
|
714 |
+
|
715 |
+
demo.launch()
|
716 |
+
|
717 |
+
# CSS ์คํ์ผ ์ถ๊ฐ
|
718 |
+
gr.HTML("""
|
719 |
+
<style>
|
720 |
+
#step-title {
|
721 |
+
font-size: 1.7em;
|
722 |
+
font-weight: bold;
|
723 |
+
}
|
724 |
+
#style-description {
|
725 |
+
font-size: 1.2em;
|
726 |
+
}
|
727 |
+
</style>
|
728 |
+
""")
|
requirements.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
gradio
|
2 |
+
requests
|
3 |
+
huggingface_hub
|
4 |
+
youtube_transcript_api
|
5 |
+
fpdf2
|