본문 바로가기
Dev DBAN/개발 이야기

파이썬으로 기사 요약하기 2편 - 요약 파일 저장

by 디반 2021. 6. 2. 23:26
반응형

파이썬 한글 요약에 관련된 내용을 구글링으로 찾아보니 이러한 내용들이 나오게 됩니다. 

Textrankr, Lexrank... 등 여러가지가 나오는데 저는 이 중 Textrankr가 뉴스 요약에는 적합하다고 판단해 Textrankr를 이용해 사용하고 있습니다. 

 

 

 

파이썬으로 기사 요약하기 1편

오늘부터 파이썬으로 사업 자동화 시키기 프로젝트 첫번째 시간으로 매일 하고 있는 뉴스 기사 요약하는 것을 파이썬을 이용해 자동화 시켜보려고 합니다. 막 구글에 "파이썬 기사 요약", "파이

mumin-blog.tistory.com

1편에서 보면 저는 summa라는 라이브러리를 다운받아 한국어가 지원이 안되는 통짜 Textrank알고리즘으로 요약을 하다 보니 이러한 불상사가 발생 했습니다. 

 

아니 형... 왜 텍스트가 적으면 요약을 안해주는거야..?

 

이러한 문제가 생겨서 저는 이 때부터 한글 요약하는 라이브러리들을 찾게 되었고 찾은 결과로 나온 것들이 바로 Textrankr라는 라이브러리였습니다. 

그래서 어떻게 쓰는건가? 하고 알아보니 처음 사용했던 것보다 진짜 사소하게 복잡하게 코드가 구성되어있지만 보고 못따라할 수준은 아니었습니다. 

클래스를 선언한 다음에 사용한거라 엄청 특별하게 어려운 것들은 없었습니다. 

현재 뉴스 기사를 가져온 다음 본문의 내용을 요약하고 그 데이터들을 엑셀 파일에 하나씩 하나씩 집어 넣어 저장하는 것 까지 구현하였습니다. 

 

import feedparser
from newspaper import Article

from openpyxl import Workbook
from typing import List
from textrankr import TextRank

#------------- 엑셀 파일들 ---------------------------------
wb = Workbook()
ws = wb.active
ws.title = "뉴스 기사"
ws.append(["제목", "링크", "내용"])

#--------------------rss피드-----------------------------
rss_url = "http://feeds.feedburner.com/inven"
rss_feed = feedparser.parse(rss_url)
# rss feed에는 총 25개의 뉴스 기사만 보여진다.

#---------------------본문 요약----------------------
#리스트형식으로 저장하기 위한 클래스 선언
class MyTokenizer:

    def __call__(self, text: str) -> List[str]:
        tokens: List[str] = text.split()
        return tokens

# 리스트 형식으로 저장하는 공간을 만들고 그 공간에 데이터들을 요약한다.
mytokenizer: MyTokenizer = MyTokenizer()
textrank: TextRank = TextRank(mytokenizer)

# 요약한 데이터는 3줄까지 가능하도록 설정하는 변수
k: int = 3

#-------------------- 직접적으로 동작하는 부분---------------------
for feed in rss_feed.entries:
    # rss_feed 속 뉴스 링크 분류
    #article에 링크 속 뉴스 본문 가져와 저장한다.
    article = Article(feed.link, language = 'ko')
    article.download()
    article.parse()

    NewsFeed = article.text
    NewsTitle = article.title
    NewsUrl = article.url
    #NewsTime = article.publish_date

    # 뉴스 본문들을 요약하고 k줄 만큼 요약해 str형식으로 저장한다
    summarized: str = textrank.summarize(NewsFeed, k)

    # 엑셀 표에다가 하나씩 때려 박는중
    ws.append([NewsTitle,NewsUrl,summarized])

#-----------엑셀 파일로 데이터 저장---------------------
wb.save(filename='뉴스기사.xlsx')

 

 

이제 엑셀 파일로 데이터 저장까지 구현했으니 다음 번에는 이 데이터들을 카카오톡 메세지로 보내던지 메일로 보내던지 해보도록 하겠습니다. 

사실을 DB구축해서 sql이런거 활용하면서 하고 싶지만 기초부터 천천히 쌓아놓고 데이터베이스 구축해서 서버통신하는걸 해보려고 합니다. 

오늘 Mysql깔아놓고 아무것도 못해가지고 절대 그런거 아닙니다.

 

반응형

댓글


"); wcs_do();