개요
네이버 최신 경제뉴스 조회 후 최 상단에 노출되는 기사에 대해 요약하는 스크립트
결과
소스
.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에 적재한 다음 결과를 텔레그램 등으로 보내주면 나름 재미난 앱을 구현할 수 있지 않을까 라는 생각이 드네요
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아주 좋은 일
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
스팀잇에 최신 뉴스 요약봇 하나 만들어도 좋을 것 같아요. ㅎㅎ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit