Coding Study/Python Project

[Python Project] 뉴스기사 3줄 요약하기

김 도경 2024. 10. 16. 13:24

[2024.10.16] 필수 온라인 강의 Part1 파이썬 라이브러리 활용 프로젝트 CH02 [텍스트] 뉴스기사 3줄 요약하기

 

프로젝트 개요

 

1. 메일로 뉴스기사를 받고 base 64로 인코딩 하기

2. 디코딩을 거쳐서 사람이 알아볼수 있게 하기

3. 텍스트에서 키워드 추출

4. 문서 요약해서 리포트 만들기

5. html 파일로 저장

 

* 사용 라이브러리 : base64, textwrap, re, collections, gensim, open, close

 

바이너리 파일로 문자열 변경 - base64
  • 바이너리 파일 (Binary file)
    - 바이너리 파일이란 ‘0’ 과 ‘1’ 을 이용한 2진수 데이터 만으로만으로 인코딩된 파일
    - 사람이 직접 읽을 수 없다 : 컴퓨터는 읽을 수 있음
    - 데이터를 효율적으로 처리, 저장, 실행 등을 목적으로 만들어진 파일
    - 장점 : 데이터를 처리하고 전송하는데 일반적으로 비용이 적게 든다.
                텍스트 파일에 비해서 데이터 처리 속도가 빠르다.
                데이터 저장 공간도 적게
    - 대표적인 확장자 : exe, dll, zip, rar, mp3, mpg, jpg, png 등

  • Base64 인코딩
    - 다양한 통신채널 (HTML, 이메일 등) 을 통해 바이너리 데이터를 안전하게 전송할 수 있게 하는 방법
    - ASCII, Unicode 인코딩과 함께 실생활에서도 많이 사용되는 인코딩 방법
        - ASCII (8bit) 인코딩은 프로토콜,시스템마다 다르게 해석되어 데이터가 왜곡될 여지가 있기 때문에 적합하지 않음
    - XML이나 HTTP 프로토콜에서도 특수문자 파싱 문제를 해결할 수 있는 수단
    - 64 진법은 ASCII문자들을 모두 표현할 수 있는 가장 작은 진법
    - 인코딩 순서 : 문자열 입력 -> ASCII/Binary (8bit) -> 6bit cut -> base64
    - https://en.wikipedia.org/wiki/Base64

  • 문자열 인코딩/디코딩
import base64           #라이브러리 불러옴

string = 'Life is too short, We need Python !'       #문자열 작성

encoded = base64.b64encode(string)              # type에러 발생함 : 바이트형식만 됨, 바이너리만 받을 수 있다는 의미 : 먼저 아스키 인코딩을 해아함

-  type에러 발생함 : base64 인코딩은 바이트형식만 됨, 바이너리만 받을 수 있다는 의미 : 먼저 아스키 인코딩을 해아함

 

- 인코딩 : 반드시 아스키부터!!!!

# ascii 인코딩
bstring = string.encode('ascii')
print(bstring)                              # b'Life is too short, We need Python !' 출력

# base64 인코딩
encoded = base64.b64encode(bstring)        
print(encoded)                              # b'TGlmZSBpcyB0b28gc2hvcnQsIFdlIG5lZWQgUHl0aG9uICE=' 출력

 

- 디코딩

# base64 디코딩
decoded = base64.decodebytes(encoded)
print(decoded)                                   # b'Life is too short, We need Python !' 출력

# ascii 디코딩
decoded_str = decoded.decode('ascii')
print(decoded_str)                               # Life is too short, We need Python ! 출력

 

  • 이미지 인코딩/디코딩
    - base64를 쓰는 이유는 이미지 인코딩을 하는 것이 더 크다.
import base64
path = "./img/0005303739_001_20220828154501895.jpg"

# 이미지 확인
from PIL import Image
img = Image.open(path)
# 바이너리 파일 읽기
with open(path, 'rb') as img:
    image = img.read()

- rb : read byte : 바이너리 파일을 읽겠다.

# 바이트 정보 확인
from bitstring import BitArray
input_str = '0xff'
c = BitArray(hex=input_str)
c.bin                                         # '11111111' 출력

- 몇 비트로 되어있냐를 물어보는 모듈 + 물어보는 코드

 

- 인코딩 : 아스키 인코딩이 필요 없음!!!

# base64 인코딩
with open(path, 'rb') as img:
    data = img.read()
    encoded = base64.b64encode(data)
    print(encoded)

 

- 디코딩

# base64 디코딩
decoded = base64.decodebytes(encoded)
print(decoded)
# 이미지 파일로 저장
file = "img/decoded.png"

with open(file, 'wb') as file:
    file.write(decoded)

 

문자열 다루기 - txtwrap

 

  • txtwrap 라이브러리 : 파이썬에서 문자열을 보기 좋은 형태로 정렬 또는 줄바꿈하는데 사용할 수 있는 라이브러리
    - 원하는 길이에 맞게 줄이기 : textwrap.shorten()
    - 긴 문장 자르기 : textwrap.wrap()
    - 긴 문장 줄바꿈 : textwrap.fill()
import textwrap

text = 'SQL과 파이썬은 전 세계에서 가장 인기 있는 프로그래밍 언어이자 미래에도 수요가 높을 것으로 예상된다. 파이썬과 SQL은 활용 범위가 겹치기만, 보통 SQL은 직접 데이터베이스를 다룰 때 이용하며 파이썬은 보다 범용적으로 프로그래밍에 활용한다. SQL은 데이터에 대한 신속한 분석이 필요하거나 기록을 불러오고 결론을 내릴 때 가장 많이 이용되는 언어이다. SQL도 좋은 언어이지만 R과 파이썬은 복잡한 통계 분석이나 머신러닝, 자동화 기능에 활용할 때, 그 장점이 빛을 발한다. 하지만 최근, 데이터 분야 채용 공고 중 45.4%가 SQL 기술을 요구하여 취업 시장에서 SQL의 수요가 가장 높은 것으로 나타났다. 데이터 사이언스, 데이터 분석, 데이터 엔지니어링, 머신러닝 분야에 취업하고 싶다면, 파이썬과 SQL 능력이 유용할 것이다. 이에, 인도 IT·빅데이터 전문 잡지 애널리틱스 인사이트가 아래와 같이 파이썬과 SQL을 비교했다. SQL은 데이터를 요청하고 추출하기 위하여 설계된 언어이다. 따라서 SQL을 이용하면, 데이터를 불러올 수 있다. 파이썬을 이용한다면, 구조화된 데이터를 수정할 수 있다. SQL은 파이썬보다 코딩이 어렵다. 채용 공고만 보면 SQL은 가장 수요가 높은 프로그래밍 기술로 보인다. 하지만 SQL이 수요가 높은 것은 단순히 기업들이 SQL을 다룰 줄 아는 개발자를 원해서가 아니다. 그들은 보통 다른 프로그래밍 언어에 SQL까지 다룰 수 있는 개발자를 원한다. 파이썬은 애널리틱스 인사이트 자체 조사에서 가장 인기 있는 프로그래밍 언어 1위를 차지했다. SQL은 10위를 기록하였다. 개발자들은 SQL로 데이터베이스를 관리 및 유지하며, 가벼운 분석을 수행하기도 하고 방대한 데이터베이스로부터 기록을 추출하기도 한다. 보통 설문조사에서 자바스크립트가 프로그래밍 언어 인기도 1위를 차지하지만, 이번 조사에서 파이썬이 1위를 차지했다. 개발자는 파이썬으로 회귀 분석을 수행하여 데이터를 분석하고 수정한다. 반면, SQL의 최대 장점은 여러 테이블의 데이터를 통합하여 하나의 데이터베이스를 구성할 수 있다는 점이다. 파이썬이나 R과 같은 범용 언어의 기본을 아는 것은 매우 중요하다. 하지만 SQL을 무시한다면, 데이터 사이언스 분야에 취업할 때 쉽지 않을 것이다. 파이썬을 다룰 수 있지만, SQL 능력이 없다면, 데이터 사이언티스트 취업 기회의 60%를 놓칠 수 있다. SQL은 여전히 데이터를 다루기 위한 인기 있는 언어로 SQL을 배우는 것은 데이터 분야 취업을 위해 필수이다. 계속해서 개발되는 새로운 언어와 프레임워크에 주목하기 쉽다. 그러나 SQL을 한 번 학습해 놓으면 데이터 산업에서 커리어를 쌓는 동안 똑똑히 그 값을 할 것이다.'

 

- 기사를 한줄로 가져옴

SQL과 파이썬은 전 세계에서 가장 인기 있는 프로그래밍 언어이자 미래에도 수요가 높을 것으로 예상된다. 파이썬과 SQL은 활용 범위가 겹치기만, 보통 SQL은 직접 데이터베이스를 다룰 때 이용하며 파이썬은 보다 범용적으로 프로그래밍에 활용한다. SQL은 데이터에 대한 신속한 분석이 필요하거나 기록을 불러오고 결론을 내릴 때 가장 많이 이용되는 언어이다. SQL도 좋은 언어이지만 R과 파이썬은 복잡한 통계 분석이나 머신러닝, 자동화 기능에 활용할 때, 그 장점이 빛을 발한다. 하지만 최근, 데이터 분야 채용 공고 중 45.4%가 SQL 기술을 요구하여 취업 시장에서 SQL의 수요가 가장 높은 것으로 나타났다. 데이터 사이언스, 데이터 분석, 데이터 엔지니어링, 머신러닝 분야에 취업하고 싶다면, 파이썬과 SQL 능력이 유용할 것이다. 이에, 인도 IT·빅데이터 전문 잡지 애널리틱스 인사이트가 아래와 같이 파이썬과 SQL을 비교했다. SQL은 데이터를 요청하고 추출하기 위하여 설계된 언어이다. 따라서 SQL을 이용하면, 데이터를 불러올 수 있다. 파이썬을 이용한다면, 구조화된 데이터를 수정할 수 있다. SQL은 파이썬보다 코딩이 어렵다. 채용 공고만 보면 SQL은 가장 수요가 높은 프로그래밍 기술로 보인다. 하지만 SQL이 수요가 높은 것은 단순히 기업들이 SQL을 다룰 줄 아는 개발자를 원해서가 아니다. 그들은 보통 다른 프로그래밍 언어에 SQL까지 다룰 수 있는 개발자를 원한다. 파이썬은 애널리틱스 인사이트 자체 조사에서 가장 인기 있는 프로그래밍 언어 1위를 차지했다. SQL은 10위를 기록하였다. 개발자들은 SQL로 데이터베이스를 관리 및 유지하며, 가벼운 분석을 수행하기도 하고 방대한 데이터베이스로부터 기록을 추출하기도 한다. 보통 설문조사에서 자바스크립트가 프로그래밍 언어 인기도 1위를 차지하지만, 이번 조사에서 파이썬이 1위를 차지했다. 개발자는 파이썬으로 회귀 분석을 수행하여 데이터를 분석하고 수정한다. 반면, SQL의 최대 장점은 여러 테이블의 데이터를 통합하여 하나의 데이터베이스를 구성할 수 있다는 점이다. 파이썬이나 R과 같은 범용 언어의 기본을 아는 것은 매우 중요하다. 하지만 SQL을 무시한다면, 데이터 사이언스 분야에 취업할 때 쉽지 않을 것이다. 파이썬을 다룰 수 있지만, SQL 능력이 없다면, 데이터 사이언티스트 취업 기회의 60%를 놓칠 수 있다. SQL은 여전히 데이터를 다루기 위한 인기 있는 언어로 SQL을 배우는 것은 데이터 분야 취업을 위해 필수이다. 계속해서 개발되는 새로운 언어와 프레임워크에 주목하기 쉽다. 그러나 SQL을 한 번 학습해 놓으면 데이터 산업에서 커리어를 쌓는 동안 똑똑히 그 값을 할 것이다.
  • textwrap.shorten()
textwrap.shorten(text, width=200)

textwrap.shorten(text, width=100, placeholder='...[이하줄임]')
  • textwrap.wrap()
wrapped_text = textwrap.wrap(text, width=40)
print(wrapped_text)

print('\n'.join(wrapped_text))

 

filled_text = textwrap.fill(text, width=40)


re
- 정규표현식(regular expressions) :  복잡한 문자열을 처리할 때 사용하는 기법
- 파이썬뿐 아니라 C, 자바, 심지어 문서 작성 프로그램 등 문자열을 처리해야 하는 다양한 곳에서 활용중
-공식 문서 : https://docs.python.org/3/library/re.html

  • 단어 추출 : re.findall()
import re

words = re.findall(r'\w+', text)        # 단어 추출
  • 전화번호 추출도 가능함
# 연락처 목록
contact = '''김미키 21 010-3344-5566 Mike@google.com 
             김소은 20 010-5032-1111 Soeun@naver.com
             유한슬 34 010-2789-1476 Lyu@school.ac.com
             박민철 40 010 4040 1313 Zoe@school.ac.com
             이민아 23 010-7777-2222 Kate@google.com'''
             
# 전화번호 추출
regex = r'0\d{1,2}[ -]?\d{3,4}[ -]?\d{3,4}'
 
phone = re.findall(regex, contact)
print("\n".join(phone))
  • 문자열 변환
# 변환(마스킹)
pat = re.compile(r'0\d{1,2}[ -]?\d{3,4}[ -]?\d{3,4}')
print(pat.sub("***-****-****", contact))

 

단어 개수 구하기 = collections.Counter
  • collections.Counter는 리스트나 문자열과 같은 자료형의 요소 중 값이 같은 요소가 몇 개인지를 확인할 때 사용
import collections
import textwrap
import re

# 문자열 편집
text = 'SQL과 파이썬은 전 세계에서 가장 인기 있는 프로그래밍 언어이자 미래에도 수요가 높을 것으로 예상된다. 파이썬과 SQL은 활용 범위가 겹치기만, 보통 SQL은 직접 데이터베이스를 다룰 때 이용하며 파이썬은 보다 범용적으로 프로그래밍에 활용한다. SQL은 데이터에 대한 신속한 분석이 필요하거나 기록을 불러오고 결론을 내릴 때 가장 많이 이용되는 언어이다. SQL도 좋은 언어이지만 R과 파이썬은 복잡한 통계 분석이나 머신러닝, 자동화 기능에 활용할 때, 그 장점이 빛을 발한다. 하지만 최근, 데이터 분야 채용 공고 중 45.4%가 SQL 기술을 요구하여 취업 시장에서 SQL의 수요가 가장 높은 것으로 나타났다. 데이터 사이언스, 데이터 분석, 데이터 엔지니어링, 머신러닝 분야에 취업하고 싶다면, 파이썬과 SQL 능력이 유용할 것이다. 이에, 인도 IT·빅데이터 전문 잡지 애널리틱스 인사이트가 아래와 같이 파이썬과 SQL을 비교했다. SQL은 데이터를 요청하고 추출하기 위하여 설계된 언어이다. 따라서 SQL을 이용하면, 데이터를 불러올 수 있다. 파이썬을 이용한다면, 구조화된 데이터를 수정할 수 있다. SQL은 파이썬보다 코딩이 어렵다. 채용 공고만 보면 SQL은 가장 수요가 높은 프로그래밍 기술로 보인다. 하지만 SQL이 수요가 높은 것은 단순히 기업들이 SQL을 다룰 줄 아는 개발자를 원해서가 아니다. 그들은 보통 다른 프로그래밍 언어에 SQL까지 다룰 수 있는 개발자를 원한다. 파이썬은 애널리틱스 인사이트 자체 조사에서 가장 인기 있는 프로그래밍 언어 1위를 차지했다. SQL은 10위를 기록하였다. 개발자들은 SQL로 데이터베이스를 관리 및 유지하며, 가벼운 분석을 수행하기도 하고 방대한 데이터베이스로부터 기록을 추출하기도 한다. 보통 설문조사에서 자바스크립트가 프로그래밍 언어 인기도 1위를 차지하지만, 이번 조사에서 파이썬이 1위를 차지했다. 개발자는 파이썬으로 회귀 분석을 수행하여 데이터를 분석하고 수정한다. 반면, SQL의 최대 장점은 여러 테이블의 데이터를 통합하여 하나의 데이터베이스를 구성할 수 있다는 점이다. 파이썬이나 R과 같은 범용 언어의 기본을 아는 것은 매우 중요하다. 하지만 SQL을 무시한다면, 데이터 사이언스 분야에 취업할 때 쉽지 않을 것이다. 파이썬을 다룰 수 있지만, SQL 능력이 없다면, 데이터 사이언티스트 취업 기회의 60%를 놓칠 수 있다. SQL은 여전히 데이터를 다루기 위한 인기 있는 언어로 SQL을 배우는 것은 데이터 분야 취업을 위해 필수이다. 계속해서 개발되는 새로운 언어와 프레임워크에 주목하기 쉽다. 그러나 SQL을 한 번 학습해 놓으면 데이터 산업에서 커리어를 쌓는 동안 똑똑히 그 값을 할 것이다.'
text = textwrap.fill(text, width=50)
print(text)

# 단어 추출
words = re.findall(r'\w+', text)
print(words)

 

  • 빈도수 산출
counter = collections.Counter(words)
print(counter)
# 덧셈
a = collections.Counter(['a', 'b', 'c', 'b', 'd', 'a'])
b = collections.Counter(['e', 'f', 'f', 'b', 'a', 'd'])

print(a)               # Counter({'a': 2, 'b': 2, 'c': 1, 'd': 1}) 출력
print(b)               # Counter({'f': 2, 'e': 1, 'b': 1, 'a': 1, 'd': 1}) 출력

print(a+b)             # Counter({'a': 3, 'b': 3, 'd': 2, 'f': 2, 'c': 1, 'e': 1}) 출력
print(a-b)             # 뺄셈, Counter({'a': 1, 'b': 1, 'c': 1}) 출력
print(a & b)           # 교집합, Counter({'a': 1, 'b': 1, 'd': 1}) 출력
print(a | b)           # 합집합, Counter({'a': 2, 'b': 2, 'f': 2, 'c': 1, 'd': 1, 'e': 1}) 출력

 

  • 상위 빈도수 단어 추출 (most_common())
# 상위 빈도수 단어 추출
print(counter.most_common(5))              # [('SQL은', 8), ('데이터', 8), ('SQL을', 6), ('데이터를', 6), ('수', 6)] 출력

 

문서 요약하기 - gensim

 

  • gensim 라이브러리 사용
    - 자연어 처리(NLP) 작업을 위해 주로 사용하는 오픈 소스 라이브러리
    - 주제 모델링, 문서 유사도 계산, 대규모 텍스트 코퍼스 처리에 매우 효율적
    - Latent Semantic Analysis(LSA), Latent Dirichlet Allocation(LDA), word2vec 같은 모델을 지원
    - 대용량 데이터에서도 성능이 우수하도록 설계
    - Word2Vec 알고리즘을 통한 자연어의 벡터화 (Word Embedding) 이 대표적
    summarization 내장 모듈로 긴 문장을 요약할 수 있음 ( gensim 4.x 버전 부터는 요약기능이 지원되지 않음 ! )
    - 사용 되는 곳 : 토픽 모델링(Topic Modeling), 문서 유사도 계산(Document Similarity), 단어 임베딩(Word Embeddings), 대규모 데이터 처리, 문서 주제 분류

    - 30+ 개국어 단어 학습 프로젝트  : https://github.com/Kyubyong/wordvectors
import gensim

model = gensim.models.Word2Vec.load('ko/ko.bin')          # 모델 불러오기

 

  • 이미 학습시켜놓은 모델을 사용함.
model.wv.most_similar("뉴스")            # 유사한 단어 검색

 

[('리포트', 0.6553798317909241),
('언론사', 0.6399534940719604),
('앵커', 0.637794017791748),
('데일리', 0.6316319704055786),
('일간지', 0.6260204315185547),
('투데이', 0.623687744140625),
('토크쇼', 0.593853771686554),
('중앙일보', 0.5876286625862122),
('데스크', 0.5873064398765564),
('한겨레', 0.5844350457191467)]
  • 유사도에 따라서 각각 다른 값이 출력됨 : 수가 클수록 유사도가 높음 : 유사도 (-1~1)
model.wv.similarity('자동차', '강아지')          # 유사도 검색, -0.019872822 출력
model.wv.similarity('자동차', '버스')            # 유사도 검색, 0.42055488 출력

 

from gensim.summarization.summarizer import summarize
import pandas as pd
import numpy as np

# 데이터 불러오기
df = pd.read_csv('Book_test.csv')
df = df.iloc[0:100]
df.reset_index(inplace=True)
  • 인공지능이 미리 요약해놓은 부분
df.head()                           #상위 5개 찍어보기
df.loc[0,'passage']
df.loc[0,'summary']                      # 요약
  • summarize를 이용한 요약
summarize(df.loc[0,'passage'])           # 첫번째 데이터 요약
summarize(df.loc[0,'passage'], ratio=0.4)           # 첫번째 데이터 요약 / 요약 길이를 0.4(전체에서 얼마까지 요약?)
  • 시각화
for i in range(0,1):
    random_number = np.random.randint(0, 100, size=1)
    print("="*120)
    print(f'{random_number[0]}' + ' 번째 문장 \n')
    print('원문: \n\n' + df['passage'][random_number[0]] + '\n\n')
    print('AI 요약: \n\n' + df['summary'][random_number[0]] + '\n\n')
    print('Gensim 요약: \n\n'+ df['extract'][random_number[0]] + '\n\n')

 

텍스트 파일 저장하기 - open, close
  • 파일 열기 : 파일 객체 = open(파일 이름, 파일 열기 모드)
    - 파일열기모드설명
    r 읽기모드 - 파일을 읽기만 할 때 사용
    w 쓰기모드 - 파일에 내용을 쓸 때 사용
    a 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용
  • 파일 닫기 : 파일 객체.close()

  • 파일 생성
    f = open("새파일.txt", 'w')            # 텍스트 파일 생성
    f.close()
  • 파일 쓰기
# 텍스트 파일 쓰기
f = open("새파일.txt", 'w')
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data) 
f.close()                #close를 안하면 변경사항이 적용이 안 됨
  • 파일 읽기
# 한줄 읽기
f = open("새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
# 여러줄 읽기
f = open("새파일.txt", 'r')
line = f.readline()
print(line)
line = f.readline()
print(line)
line = f.readline()
print(line)
f.close()
# 모든 줄 읽기
f = open("새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()

 

  • 내용 추가하기
# w 모드 사용 시
f = open("새파일.txt",'w')
for i in range(11, 21):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()
# a 모드 사용 시
f = open("새파일.txt",'a')
for i in range(11, 21):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()
  • with 문 사용하기
# close() 사용 불필요
with open("새파일.txt", "w") as f:
    for i in range(1, 11):
        data = "%d번째 줄입니다.\n" % i
        f.write(data)

 

미니 프로젝트 실습
뉴스 기사 3줄 요약하기
뉴스 기사 (base 64 파일) 디코딩

 

 

  • 바이너리 파일 읽기
f = open("news/image", 'rb')         #open을 통해서 뉴스기사의 이미지 읽기
image = f.readlines()
f.close

f = open("news/article", 'rb')        #뉴스기사 읽기
article = f.readlines() 
f.close()

 

  • base64 디코딩

 

이미지 디코딩

import base64
file_base64 = image[0]                       # 기사 이미지 디코딩(사람이 읽을 수 있게)

path = "news/image.jpg"                      #jpg로 이미지 복구
with open(path, 'wb') as f:
    decoded_data = base64.decodebytes(file_base64)
    f.write(decoded_data)
    
from PIL import Image                         # PIL 외부라이브러리 설치 
img = Image.open(path)                        # 이미지 확인
img

 

기사 본문 디코딩

# 기사 본문 디코딩
file_base64 = article[0]
decoded_data = base64.decodebytes(file_base64)

decode_data                        #아직 완성X

article = decode_data.decode('utf-8')          #디코딩 데이터를 utf-8로 디코딩함 -> 이제 사람이 읽을 수 있음

 

문서 요약 / 키워드 추출
  • summarize 함수
from gensim.summarization.summarizer import summarize                 #gensim라이브러리 사용
from gensim.summarization.textcleaner import split_sentences

print(summarize(aritcle, word_count=50))            # 단어수 기반 요약 (word_count)
print(summarize(article, ratio=0.1))                # 비율 기반 요약 (ratio)

article_summarized = summarize(article, ratio=0.1)    # 요약 텍스트 저장, article_summarized라는 변수에 저장

 

  • 키워드 추출
import collections
import textwrap
import re

article_align = textwrap.fill(article, width=50)          # 줄바꿈 정렬, textwrap.fill 함수

words = re.findall(r'\w+', article_align)                 # 단어 추출 , refindall 함수

counter = collections.Counter(words)                      # 빈도수 산출
print(counter.most_common(5))                             # 키워드 추출, 많이 등장하는 5위를 추출
# [('있다', 8), ('달', 7), ('발사', 6), ('아르테미스', 6), ('29일', 5)]로 추출

keywords = counter.most_common(5)[1:]

 

요약 리포트 작성
from IPython.display import Image            #이미지파일 불러옴
Image(filename=path, width=300)

print(article_summarized)                    # 요약된거 불러옴

keys = ['# ' + elem[0] for elem in keywords]        #키워드 추출
keys = ' '.join(keys)
print(keys)
html 파일로 저장
htmlfile = open("news/summary.html", "w")
htmlfile.write("<html>\n")
htmlfile.write ("<h1>"+ '카운트다운 들어간 아르테미스 계획…"달의 여신"은 미소지을까' + "</h2>\n") 
htmlfile.write ("<img src='image.jpg'/>\n")
htmlfile.write ("<h2>"+ article_summarized + "</h2>\n") 
htmlfile.write ("<h2 style='background-color:powderblue;''>"+ keys + "</h2>\n") 
htmlfile.write("</html>\n")
htmlfile.close()

 

'Coding Study > Python Project' 카테고리의 다른 글

[Python Project] 달력 만들기  (0) 2024.10.16