본문 바로가기
ABC부트캠프

ABC 부트캠프 12일차(07.18)

by attack_u 2023. 7. 22.

오늘은 대통령 취임식 연설문을 활용한 텍스트마이닝을 했다.

 

데이터 준비하기

# https://www.pa.go.kr/research/contents/speech/index.jsp
# https://www.korea.kr/news/policyNewsView.do?newsId=148901469

moon = open('/content/문재인대통령_연설문.txt').read()

데이터 전처리

특수기호 및 html tag(줄바꿈\n), 숫자등 삭제

moon = re.sub('[^가-힣]', ' ', moon) # 한글을 제외한 단어 공백으로 변경

명사 단어 추출

# komoran, Hannanum, kkma
hannanum = konlpy.tag.Hannanum()
h_moon_nn = hannanum.nouns(moon) # 리스트 형태

komoran = konlpy.tag.Komoran()
k_moon_nn = komoran.nouns(moon)

konlpy패키지에는 komoran, Hannanum, kkma 등의 클래스가 있는데 두 클래스를 사용했다.

 

데이터 프레임으로 변황

h_word_df = pd.DataFrame({'word':h_moon_nn})
k_word_df = pd.DataFrame({'word':k_moon_nn})

단어수 파생변수 만들기

h_word_df['count'] = h_word_df['word'].str.len() # 글자수 count파생 변수에 치환
k_word_df['count'] = k_word_df['word'].str.len() # 글자수 count파생 변수에 치환

두 글자 이상 단어만 남기고 삭제(한단어 삭제)

h_word_df = h_word_df.groupby('word', as_index=False).agg(n=('word', 'count')).sort_values('n', ascending=False)
k_word_df = k_word_df.groupby('word', as_index=False).agg(n=('word', 'count')).sort_values('n', ascending=False)

단어 빈도 시각화

# 2개의 그래프() 한번에 표현하기

fig, axes = plt.subplots(1,2, figsize=(15,5)) # (1, 2) 한개를 두개로 나눔
plt.suptitle('한국어 자연어 처리기 Hannanum, Komoran 명사 비교 분석')

sns.barplot(data=h_top20, x='n', y='word', ax=axes[0]) #axes의 첫번째 즉 왼쪽에 그림
axes[0].set_title('Hannanum')

sns.barplot(data=k_top20, x='n', y='word', ax=axes[1]) #axes의 첫번째 즉 왼쪽에 그림
axes[1].set_title('Komoran')

워드클라우드 시각화

from wordcloud import WordCloud

wc = WordCloud(background_color='white', width=1000, height=700, font_path=font_path)
img_wordcloud = wc.generate_from_frequencies(k_word_dic)

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

mask를 활용한 워드클라우드

from PIL import Image
import numpy as np
from wordcloud import ImageColorGenerator

# 이미지 불러오기
icon = Image.open('/content/korea_mask.jpg')
korea = Image.open('/content/korea.jpg')
#
korea_mask = np.array(korea)

# 워드 클라우드 만들기
wc = WordCloud(background_color='white', width=1000, height=700, font_path=font_path, mask=korea_mask)
img_wordcloud = wc.generate_from_frequencies(k_word_dic)

image_colors = ImageColorGenerator(korea_mask)
wordcloud = img_wordcloud.recolor(color_func=image_colors)

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

태극기를 활용하여 가장 많이 나온 단어를 워드클라우드로 시각화 했다.

 

비 엄청 쏟아진 후 하늘이 이뻐서 찍었다⛅⛅

'ABC부트캠프' 카테고리의 다른 글

ABC 부트캠프 17일차(07.25)  (0) 2023.08.01
ABC 부트캠프 16일차(07.24)  (0) 2023.08.01
ABC 부트캠프 11일차(07.17)  (0) 2023.07.22
ABC 부트캠프 10일차(07.14)  (0) 2023.07.14
ABC 부트캠프 9일차(07.13)  (0) 2023.07.14