오늘은 대통령 취임식 연설문을 활용한 텍스트마이닝을 했다.
데이터 준비하기
# 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 |