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

in hive-192808 •  last year 

개요

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

결과

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에 적재한 다음 결과를 텔레그램 등으로 보내주면 나름 재미난 앱을 구현할 수 있지 않을까 라는 생각이 드네요

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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

image.png

아주 좋은 일

Posted using SteemPro Mobile

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