고양국제고/더브레인

[더브레인-3] 2. 워드클라우드 예제 실습 안내

카루-R 2022. 7. 7. 14:49
반응형
 

환영합니다, Rolling Ress의 카루입니다.

** 3-2. 워드클라우드 [통계]

준비물: 단어를 분석할 글 (.txt 파일로 제작 후 코랩에 업로드)

(신문기사나 논문도 괜찮습니다)

이건 전산언어학이라기보단 통계쪽에 더 가까워요. 정규표현식보단 이쪽이 훨씬 쉬울 겁니다.

!pip install nltk
!pip install konlpy
!apt-get update -qq
!apt-get install fonts-nanum* -qq

from collections import Counter
from konlpy.tag import Hannanum
from wordcloud import WordCloud
from PIL import Image
import numpy as np      
import pandas as pd
import matplotlib.pyplot as plt

def flatten(l):
  flatList = []
  for elem in l:
    if type(elem) == list:
      for e in elem:
        flatList.append(e)
    else:
      flatList.append(elem)
  return flatList

첫 코드는 이렇게 입력해주시면 됩니다. 그냥 분석에 필요한 도구 입력하고 함수 하나 정의해둔 거니, 여기는 별 다른 설명 하지 않고 진행하겠습니다.

 
with open('_________', 'r', encoding='UTF-8') as f:
  lines = f.readlines()

hannanum = Hannanum()

temp = []
for i in range(len(lines)):
  temp.append(hannanum.nouns(lines[i]))

word_list = flatten(temp)

stop_words = [_____]

word_list = [x for x in word_list if not x in stop_words]
word_list = pd.Series([x for x in word_list if len(x) > 1])
word_list.value_counts().head(10)

그 다음 예제 코드는 이렇게 입력해주시면 됩니다. 첫 번째 빈칸에는 여러분의 txt 파일 이름, 두 번째 빈칸에는 워드클라우드에서 무시할 단어를 따옴표로 감싸 넣어주시면 됩니다. 예를 들어, 제 블로그의 글을 분석한다고 할 때 닉네임은 중요한 게 아니니 생략해버릴 수 있습니다.

stop_words = ['카루', '라에', '세타', '실비아', '키아나']

이런 식으로요. 만약 없다면 그냥 []만 남겨두셔도 됩니다. 이제 코드 해설을 해드리겠습니다.

 
with open('_________', 'r', encoding='UTF-8') as f:
  lines = f.readlines()

파일을 읽어서 라인별로 분할하는 부분입니다. 참고로 여러분 컴퓨터는 UTF-8이 아니라 euc-kr을 사용해야 할 수도 있습니다.

temp = []
for i in range(len(lines)):
  temp.append(hannanum.nouns(lines[i]))

리스트로 분할한 텍스트에서, 명사만 추려서 새로운 리스트를 만드는 과정입니다.

word_list = flatten(temp)

맨 위에 함수가 정의되어 있는데, 리스트를 1차원으로 눌러주는 역할을 합니다. 크게 신경 쓰실 필요는 없어요.

word_list = [x for x in word_list if not x in stop_words]
word_list = pd.Series([x for x in word_list if len(x) > 1])
word_list.value_counts().head(10)

불용어(데이터 분석에서 별 의미가 없는 단어)를 제거하고 판다스 배열로 만드는 과정입니다. 그리고 맨 아랫줄은 수가 가장 많은 순서대로 10개의 단어를 보여주는 코드입니다. 이걸 잘 관찰해보세요.

wordcloud = WordCloud(
    font_path = 'NanumGothic',
    width = 800,
    height = 800,
    background_color = 'white'
)

count = Counter(word_list)
wordcloud = wordcloud.generate_from_frequencies(count)
array = np.array(wordcloud.to_image())

fig = plt.figure(figsize=(10,10))
plt.imshow(array, interpolation = 'bilinear')
plt.show()                   
fig.savefig('wordcloud.png')

그리고 이건 본격적으로 워드클라우드를 만드는 과정입니다. 입력해주세요.

count = Counter(word_list)
wordcloud = wordcloud.generate_from_frequencies(count)
array = np.array(wordcloud.to_image())

리스트의 단어를 센 뒤, 자주 나오는 단어를 바탕으로 워드클라우드를 생성합니다.

fig = plt.figure(figsize=(10,10))
plt.imshow(array, interpolation = 'bilinear')
plt.show()                   
fig.savefig('wordcloud.png')

지난번에도 사용했던 matplotlib입니다. 출력이 끝나면 wordcloud.png 라는 파일로 저장합니다.

이건 제 블로그 글.. Karu's Story의 특정 글을 바탕으로 돌려본 워드클라우드입니다. 여러분도 해당 사진이 완성되면, 개인 드라이브에 올려주세요. 정규동아리 최종 보고서에 넣어도... 괜찮지 않을까요? 참고로 보고서에 넣을 거라면 figsize를 (10,5) 정도로 바꿔주세요.

반응형