티스토리 뷰

 

▶워드 클라우드

워드 클라우드는 핵심 단어를 시각화하는 기법입니다.

문서의 키워드, 개념 등을 직관적으로 파악할 수 있게 핵심 단어를 시각적으로 돋보이게 합니다.

 

▷wordcloud 라이브러리 install, import

!pip install wordcloud
from wordcloud import WordCloud

 

▷wordcloud 기본 예제

▷예제에 사용할 파일

wordData.txt
0.03MB

 

▷txt파일 읽어오기

text = open('wordData.txt').read()

 

▷generate() : 단어별 출현 빈도수를 비율로 반환

wordcloud = WordCloud.generate(text)
wordcloud.words_ # 전체 글자의 빈도수 나타내기

 

▷wordcloud(위에서 정의한 객체)를 시각화 - matplotlib.pyplot

import matplotlib.pyplot as plt

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

imshow는 이미지를 출력할 수 있는 함수입니다. 

wordcloud 데이터를 사용하고, inerpolation는 자료의 시각화를 돕기위한 인자입니다. 다음 사진을 참고하면 유용하겠습니다.

axis 는 축에 대한 함수입니다. 이때 'off'는 축을 제거한다는 의미가 되겠습니다.

위 코드에 대한 출력입니다.

out::::

 

▷max_font_size : 출현 빈도가 가장 많은 단어의 크기를 설정

wordcloud = WordCloud(max_font_size=50).generate(text)

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

out::::

 

▷max_words : 워드 클라우드에 표시되는 단어의 개수를 설정

wordcloud = WordCloud(max_words=500).generate(text) # 500개 단어까지 표시

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

out::::

 

 

 

▷wordcloud mask적용 예제

▷예제에 사용할 파일 불러오기

alice.txt
0.14MB

text = open('./alice.text').read()

 

▷mask를 활용하기 위한 라이브러리 import

from PIL import Image # 이미지에서 마스킹 데이터를 출력
from wordcloud import STOPWORDS # 불용어. 워드 클라우드로 작성할 단어에서 제외할 단어를 지정

import numpy as np

 

▷mask이미지를 ndarray로 저장

alice_mask = np.array(Image.open('./alice_mask.png'))

 

▷불용어 지정

stopwords = set(STOPWORDS) # 객체 생성
stopwords.add('said') # 불용어 추가

 

▷불용어 조건을 추가하여 wordcloud 생성

wc = WordCloud(backgroud_color='white', max_words=2000, stopwords=stopwords, mask=alice_mask)
wordcloud = wc.generate(text)

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

out::::

 

▷컬러 마스크의 톤에 맞춰 wordcloud 생성

alice_color.png
0.40MB

from wordcloud import ImageColorGeneratator # 원본 색상과 유사하게 색을 표현해주는 라이브러리
text = open('./alice.txt').read()
mask = np.array(Image.open('./alice_color.png'))

wc = WordCloud(background_color='white', max_words=2000, stopwords=stopwords, mask=mask,
	max_font_size=40)
wordcloud = wc.generate(text)
image_color = ImageColorGenerator(mask) # 객체 생성
import random

plt.figure(figsize=(15,10))
plt.imshow(wordcloud.recolor(color_func=image_colors, random_state=3), interpolation='bilinear')
plt.axis('off')
plt.show()

같은 색끼리도 차이를 두기 위해 random_state를 주겠습니다.

out:::

 

 

 

 

▷형태소 분석 + 워드 클라우드 예제

▷형태소 분석 라이브러리 koNLpy 및 내장 문서 import

!pip install konlpy

from konlpy.corpus import kolaw
from kolnpy.tag import Twitter
t = Twitter()

import nltk # 말 모음 라이브러리

 

▷kolaw 읽어서 불어오기

ko_law_text = kolaw.open('./constitution.txt').read()

 

▷kolaw에서 명사 추출

token_ko = t.nouns(ko_law_text)

token_ko를 출력해보면 잘 출력되는 것도 있는 반면, 무엇인지를 확인하기 어려울 정도의 한글자 단어들을 발견할 수 있습니다. 

그렇기 때문에, 의미를 알 수 없는 한글자 단어들은 불용어 리스트로 만들어 token_ko에서 제거해주겠습니다.

# 불용어 리스트(제거할 리스트)
stop_words = ['제', '월', '일', '조', '수', '때', '그', '이', '바', '및', '안', '정', '관', '위', '장']
token_ko = [each_word for each_word in token_ko if each_word not in stop_words]

 

▷단어 별 빈도수 출력

text()는 문서를 편리하게 탐색할 수 있는 다양한 기능을 제공합니다.(nltk 라이브러리에 있는 함수입니다.)

ko = nltk.Text(token_ko)
ko.vocab().most_common(50)

out::::

set 형태로 저장되어 있음

위에서 확인했다 싶이 set형태를 딕셔너리 형태로 변환해주겠습니다.

data = ko.vocab().most_common(500) # set형태
tmp_data = dict(data)

 

+google colab에서 한글 폰트 사용하기

!apt-get update -qq
!apt-get install fonts-nanum* -qq

import matplotlib.font_manager as fm
sys_font = fm.findSystemFonts()

[f for f in sys_font if 'Nanum' in f] # 나눔글꼴 전부 다 가져오기

out::::

이 중에서 아무거나 사용해도 무관합니다

 

▷generate_from_frequencies() : 딕셔너리에 저장된 데이터를 wordcloud 생성

wordcloud = WordCloud(
	font_path = '/usr/share/fonts/truetype/nanum/NanumPen.ttf',
    background_color = 'white').generate_from_frequencies(tmp_data)
    
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()

out::::

 

▷위 wordcloud를 mask에 적용

korea_mask.jpg
0.10MB

mask = np.array(Image.open('./korea_mask.jpg'))

wordcloud = WordCloud(
	font_path = '/usr/share/fonts/truetype/nanum/NanumPen.ttf',
    background_color = 'white',
    mask=mask).generate_from_frequencies(tmp_data)
    
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()

out::::

 

 


여기까지 워드 클라우드에 대해 알아보았습니다 :)

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함