Python

[파이썬] 한글 워드 클라우드 생성 및 특정 모양 적용 - KoNLPy, mask

weweGH 2025. 1. 4. 09:00
반응형

한글 워드 클라우드 생성
한글 워드 클라우드 생성


한글 워드 클라우드 생성 및 특정 모양 적용 - KoNLPy, mask


들어가며


워드 클라우드는 텍스트 분석에 주로 사용되는 그래프입니다. 주요 키워드나 텍스트의 분포를 파악하는 데 중요한 역할을 합니다.

이 글에서는 KoNLPy 패키지를 사용하여 한글 워드 클라우드를 생성하는 방법에 대해 설명합니다. 또한 생성한 워드 클라우드를 특정 조건으로 필터링하는 방법과 mask 메소드를 사용하여 특정 모양에 적용하는 방법을 소개합니다.


  • 텍스트 데이터
  • 한글 워드 클라우드 생성
  • 특정 조건으로 필터링한 워드 클라우드
  • 특정 모양을 적용한 워드 클라우드

텍스트 데이터


이 글에서 예제로 활용할 텍스트 데이터는 특정 키워드에 대한 뉴스 제목을 크롤링하여 사용하겠습니다. 크롤링에 대한 자세한 방법은 아래 글을 참고하세요.

 

[파이썬] 특정 키워드 네이버 뉴스 크롤링 - BeautifulSoup

특정 키워드 네이버 뉴스 크롤링 - BeautifulSoup들어가며비트코인 자동 매매 프로그램을 만들기 전에 '비트코인'에 대한 뉴스를 크롤링해서 텍스트 분석을 먼저 진행하기로 했습니다. 우선, '

wewegh.tistory.com


예제로 활용할 키워드는 '애플'입니다. '애플'이라는 단어를 키워드로 네이버 뉴스 제목을 크롤링하여 생성한 apple_crawling.csv를 예제로 활용하겠습니다.

import pandas as pd

df = pd.read_csv('apple_crawling.csv', encoding='euc-kr')
df.head()

df head 출력 결과
df head 출력 결과


한글 워드 클라우드 생성


먼저 필요한 패키지를 임포트 합니다. 워드 클라우드를 생성하기 위해 필요한 wordcloud와 시각화를 위한 matplotlib을 임포트 합니다. konlpy는 한글 텍스트를 처리하고 분석하기 위해 사용되는 자연어 처리 패키지입니다. Okt는 형태소 단위 분석을 할 때 사용합니다.

font_path는 워드 클라우드에 사용할 폰트를 지정합니다. 이 글에서는 맥의 기본 한글 폰트인 AppleGothic을 사용했습니다.

from wordcloud import WordCloud
import matplotlib.pyplot as plt

from konlpy.tag import Okt
okt = Okt()

font_path = "/System/Library/Fonts/Supplemental/AppleGothic.ttf"

위에서 설명한 바와 같이 '애플'을 키워드로 네이버 뉴스 제목을 크롤링한 df를 사용합니다. df의 title 컬럼의 모든 텍스트를 하나의 문자열로 결합합니다.

df = pd.read_csv('apple_crawling.csv', encoding='euc-kr')
display(df.head())

print('text: ')
text = " ".join(df['title'])
text

문자열 결합
문자열 결합


okt를 활용하여 text에서 명사만 추출합니다.

tokens = okt.nouns(text)
tokens[0:5]

명사 추출
명사 추출


명사만 추출한 결과를 다시 하나의 문자열로 결합합니다.

processed_text = " ".join(tokens)
processed_text

명사 추출 후 결합
명사 추출 후 결합


이제 워드 클라우드를 생성합니다. 위에서 지정한 font_path로 폰트를 설정하고 적절한 크기를 맞춘 후, plt를 활용하여 워드 클라우드를 시각화합니다.

wordcloud = WordCloud(font_path=font_path, width=800, height=400, background_color='white').generate(processed_text)

plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

워드 클라우드 생성
워드 클라우드 생성

반응형

특정 조건으로 필터링한 워드 클라우드


워드 클라우드 시각화 결과, 한 글자 단어(기, 요, 총, 해, 초)가 많이 보입니다. 분석에 불필요한 단어가 될 수 있으므로 단어의 길이가 1 이상인 단어들로 필터링하여 워드 클라우드를 생성하겠습니다.

명사를 추출하여 tokens를 생성하는 과정에서 len을 활용하여 단어의 길이 조건을 추가했습니다. 조건을 추가한 워드 클라우드 시각화 결과, 한 글자 단어가 제외된 것을 확인할 수 있습니다.

df = pd.read_csv('apple_crawling.csv', encoding='euc-kr')
text = " ".join(df['title'])

tokens = okt.nouns(text)
tokens = [word for word in tokens if len(word) > 1]

processed_text = " ".join(tokens)

wordcloud = WordCloud(font_path=font_path, width=800, height=400, background_color='white').generate(processed_text)

plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

특정 조건을 추가한 워드 클라우드
특정 조건을 추가한 워드 클라우드


특정 모양을 적용한 워드 클라우드


워드 클라우드 결과를 단순한 사각형 형태가 아닌 특정 모양을 적용하면 텍스트 분석 결과를 보다 효과적으로 시각화할 수 있습니다. mask 옵션을 사용하여 원하는 이미지 형태로 워드 클라우드를 특정 모양에 적용할 수 있습니다.

이 글에서는 '애플' 키워드에 대한 텍스트이므로 애플 로고를 활용하여 워드 클라우드를 시각화하겠습니다. 위에서 생성한 processed_text를 그대로 사용하고, 이미지 처리 패키지와 함께 mask 메서드를 활용하여 워드 클라우드를 특정 모양에 적용합니다.

from PIL import Image
import numpy as np

mask = np.array(Image.open('apple.jpeg'))

wordcloud = WordCloud(font_path=font_path, width=800, height=400, background_color='white', mask=mask).generate(processed_text)

plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

특정 모양을 적용한 워드 클라우드
특정 모양을 적용한 워드 클라우드


반응형