블로그 글 작성할 때 미션만 클리어하기 위해 키워드 + 음식점 이름으로 작성하고는 했는데
상위 노출을 위해 최적화된 제목을 작성하는 것을 도와주는 프로그램을 만들어봅시다.
Chat-GPT와 여러 대화 끝에 프로그램을 완성시키고 따라서 코딩해 봅니다 ^.^ 말로 하는 프로그래밍.
0. 라이브러리 설치
pip install transformers
- 라이브러리 설치 가상환경에서도 안 되고 그냥도 안 되어가지고 너무 힘들었는데 다운그레이드하니까 해결됨.
- 처음에 웹앱으로 만들어줘서 웹으로 만들어줘서 안 되는 줄 알았는데 3.13이 너무 최신버전이라 안 되는 거였음.
- 3.8으로 버전 낮추니까 너무 클린하고 쾌적하게 잘 됩니다.
1. GPT-2 모델 및 토크나이저 로드
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# 모델 로드 함수
def load_model():
model_name = "gpt2"
model = GPT2LMHeadModel.from_pretrained(model_name)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
return model, tokenizer
model, tokenizer = load_model()
- GPT-2 모델을 사용하여 텍스트 생성 작업
- GPT2LMHeadModel과 GPT2Tokenizer는 Hugging Face 라이브러리에서 제공하는 사전 훈련된 모델
2. 제목 생성 함수
def generate_title(keyword, restaurant_name, max_length=50, num_titles=5):
"""키워드와 음식점 이름을 기반으로 GPT-2로 제목 생성"""
input_text = f"키워드: {keyword}\n음식점: {restaurant_name}\n제목:"
input_ids = tokenizer.encode(input_text, return_tensors="pt")
# 모델을 사용하여 텍스트 생성
outputs = model.generate(
input_ids,
max_length=max_length,
num_return_sequences=num_titles,
temperature=0.7, # 텍스트 창의성을 조절
top_p=0.9, # 확률 기반 필터링
do_sample=True # 샘플링을 활성화하여 랜덤성 부여
)
# 생성된 제목 디코딩
titles = [tokenizer.decode(output, skip_special_tokens=True).split("제목:")[-1].strip() for output in outputs]
return titles
- 키워드와 음식점 이름을 입력받고, 이를 기반으로 GPT-2 모델을 사용하여 제목을 생성
- 생성된 제목을 리스트 형식으로 반환
3. SEO 점수 계산 함수
def calculate_seo_score(title, keyword, restaurant_name):
"""SEO 점수를 계산하는 함수"""
# SEO 점수를 계산하는 여러 기준이 포함됩니다.
keyword_score = 1.0 if title.lower().startswith(keyword.lower()) else 0.5
restaurant_score = 1.0 if restaurant_name.lower() in title.lower() else 0.5
length_score = 1.0 if 40 <= len(title) <= 60 else 0.5
click_word_score = 1.0 if any(word in title for word in ["추천", "리뷰", "TOP", "필독"]) else 0.5
seo_score = round((keyword_score + restaurant_score + length_score + click_word_score) / 4, 2)
return seo_score
- SEO 점수를 계산하여 제목이 얼마나 검색 최적화에 적합한지 평가
- 제목의 길이, 키워드, 포함 여부, 클릭 유도 단어 등을 고려하여 SEO 점수를 계산.
4. Tkinter UI 생성
import tkinter as tk
from tkinter import messagebox
def on_generate_button_click():
keyword = entry_keyword.get()
restaurant_name = entry_restaurant.get()
num_titles = int(slider_num_titles.get())
if keyword.strip() and restaurant_name.strip():
titles = generate_title(keyword, restaurant_name, num_titles=num_titles)
result_text.delete(1.0, tk.END)
for idx, title in enumerate(titles, start=1):
seo_score = calculate_seo_score(title, keyword, restaurant_name)
result_text.insert(tk.END, f"{idx}. 제목: {title} (SEO 점수: {seo_score})\n")
else:
messagebox.showwarning("입력 오류", "키워드와 음식점 이름을 모두 입력해주세요!")
root = tk.Tk()
root.title("음식점 제목 생성기")
label_keyword = tk.Label(root, text="키워드를 입력하세요")
label_keyword.pack()
entry_keyword = tk.Entry(root)
entry_keyword.pack()
label_restaurant = tk.Label(root, text="음식점 이름을 입력하세요")
label_restaurant.pack()
entry_restaurant = tk.Entry(root)
entry_restaurant.pack()
label_num_titles = tk.Label(root, text="생성할 제목 수")
label_num_titles.pack()
slider_num_titles = tk.Scale(root, from_=1, to=10, orient=tk.HORIZONTAL)
slider_num_titles.set(5)
slider_num_titles.pack()
button_generate = tk.Button(root, text="제목 생성", command=on_generate_button_click)
button_generate.pack()
result_text = tk.Text(root, height=10, width=50)
result_text.pack()
root.mainloop()
- Tkinter를 사용
- 사용자가 입력한 키워드와 음식점 이름을 바탕으로 제목을 생성하고 SEO 점수를 표시.
5. 실행
- 실행도 가상환경 활성화부터.
- (가상환경이름) 이런 식으로 붙어있으면 활성화된 거 랬음. python 파일이름.py로 실행.
가상환경 사용해 봤으니 이런 것도 있구나 하고 깨달아봄.
어우 GPT-2 친구는 바보라는 것을 깨달았습니다.
'Python' 카테고리의 다른 글
[파이썬] 판다스로 블로그 통계 분석하기 (.csv 파일) (1) | 2024.12.15 |
---|---|
[Python] tkinter 기초부터 배우기 GUI 개발 시작하기 (2) | 2024.12.14 |
[Python 프로젝트] 맛집 리뷰 자동화 만들기 #4 미니 (1) | 2024.12.12 |
[파이썬 기초] 가계부 프로그램 (0) | 2024.12.12 |
[파이썬 기초] 간단한 메모장 프로그램 만들기 (0) | 2024.12.12 |