[LANGCHAIN] GPT로 최신 뉴스 요약하기

in GPT COMMUNITY6 months ago

개요

네이버 최신 경제뉴스 조회 후 최 상단에 노출되는 기사에 대해 요약하는 스크립트

결과

image.png

소스

.env 파일에 OPEN_API_KEY 가 사전 정의되어 있어야 됨

import requests
from bs4 import BeautifulSoup as bs

from langchain.chat_models import ChatOpenAI
from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.prompts import PromptTemplate
from langchain.chains.combine_documents.stuff import StuffDocumentsChain
from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplate

from dotenv import load_dotenv

# 환경변수 로드
load_dotenv()

# LLM 객체 생성
llm = ChatOpenAI(
    temperature=0,
    model_name="gpt-3.5-turbo-16k-0613",
)

# 네이버 뉴스(경제) 에서 최신 뉴스 10개 가져오기(매번 바뀌게 됨, 파싱 규칙이 달라질 수 있음에 유의)
page = requests.get("https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=101")
soup = bs(page.text, "html.parser")

elements = soup.select(".sh_list")[0].select(".sh_text > a")

for index, element in enumerate(elements, 1):
    print("{} {} {}".format(index, element.text, element.attrs["href"]))

print("\n")

# 개별 웹 상세 페이지 로드
# (시간 관계상 최신 1개만 처리)
loader = WebBaseLoader(elements[0].attrs["href"])

text = loader.load_and_split()

load_content = text[0].page_content
title = text[0].metadata["title"]
content = load_content.split("인쇄하기")[1].split("기자 프로필")[0].replace("\n", "").strip()

print(f"\n제목 : {title}")
print(f"\n내용 : {content}")

text_splitter = CharacterTextSplitter(
    separator="\n",
    chunk_size=1000,  # 쪼개는 글자수
    chunk_overlap=200,  # 오버랩 글자수
    length_function=len,
    is_separator_regex=False,
)

texts = text_splitter.create_documents([content])

# Define prompt
prompt_template = """다음 내용을 간결하게 요약하여 작성하세요.:
"{text}"
요약내용:"""
prompt = PromptTemplate.from_template(prompt_template)

# Define LLM chain
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-16k")
llm_chain = LLMChain(llm=llm, prompt=prompt)

# Define StuffDocumentsChain
stuff_chain = StuffDocumentsChain(llm_chain=llm_chain, document_variable_name="text")

print(f"\n요약내용 : {stuff_chain.run(texts)}")

맺음말

정말 손쉽게 기사 조회 및 요약업무를 수행 할 수 있습니다. 단점이라면 1개 요약하는데 약 1~20초 정도 걸린다는 것 정도 ... 그래서 배치로 10분 주기로 작업을 수행하여 DB에 적재한 다음 결과를 텔레그램 등으로 보내주면 나름 재미난 앱을 구현할 수 있지 않을까 라는 생각이 드네요

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

아주 좋은 일

Posted using SteemPro Mobile

스팀잇에 최신 뉴스 요약봇 하나 만들어도 좋을 것 같아요. ㅎㅎ

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.029
BTC 60681.54
ETH 3358.73
USDT 1.00
SBD 2.49