자연어처리(워드클라우드)

yeoni·2023년 6월 16일
0

머신러닝

목록 보기
23/40

워드클라우드

1. 앨리스

  • 많이 나오는 said 단어는 stopword 처리
  • WordCloud 모듈은 자체적으로 단어를 추출해서 빈도수를 조사하고 정규화하는 기능을 가지고 있다.
import matplotlib.pyplot as plt
import platform
import koreanize_matplotlib
import numpy as np
from wordcloud import WordCloud, STOPWORDS
from PIL import Image
%matplotlib inline

text = open('./data/alice.txt').read()
alice_mask = np.array(Image.open('./data/alice_mask.png'))
stopwords = set(STOPWORDS)
stopwords.add('said')

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

plt.figure(figsize=(12, 12))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

2. 스타워즈

import matplotlib.pyplot as plt
import platform
import koreanize_matplotlib
import numpy as np
import random
from wordcloud import WordCloud, STOPWORDS
from PIL import Image
%matplotlib inline

text = open('./data/a_hope.txt').read()
text = text.replace('HAN', 'Han')
text = text.replace("LUKE'S", 'Luke')

mask = np.array(Image.open('./data/stormtrooper_mask.png'))
stopwords = set(STOPWORDS)
stopwords.add('int')
stopwords.add('ext')

wc = WordCloud(max_words=1000, mask=mask, stopwords=stopwords, margin=10, random_state=1).generate(text)
defualt_colors = wc.to_array()

# 그레이톤으로 그리기 위한 색상함수를 정의
def grey_color_func(word, font_size, position, orientation, random_state=None, **kwargs):
    return 'hsl(0, 0%%, %d%%)' % random.randint(60, 100)
    
plt.figure(figsize=(12,12))
plt.imshow(wc.recolor(color_func=grey_color_func, random_state=3), interpolation='bilinear')
plt.axis('off')
plt.show()

3. 육아휴직

import nltk
import matplotlib.pyplot as plt
import koreanize_matplotlib
from konlpy.tag import Okt
from konlpy.corpus import kobill
from wordcloud import WordCloud, STOPWORDS
%matplotlib inline

doc_ko = kobill.open('1809890.txt').read()

t = Okt()
tokens_ko = t.nouns(doc_ko) # 단어 모음

# nltk 를 사용해서 토큰(빈도수 포함) 분석
ko = nltk.Text(tokens_ko, name='대한민국 국회 의안 제 1809890호') 
print(len(ko.tokens)) # 문서에서 토큰의 수, 735
print(len(set(ko.tokens))) # 유일 단어 수, 250
ko.vocab() # 단어마다 개수

stop_words = [
    '.',
    '(',
    ')',
    ',',
    "'",
    "%",
    "-",
    "X",
    ").",
    "x",
    "의",
    "자",
    "에",
    "안",
    "번",
    "호",
    "을",
    "이",
    "다",
    "만",
    "로",
    "가",
    '를'
] # 한글 stopword는 상황에 따라 복잡해서 직접 입력

ko = [each_word for each_word in ko if each_word not in stop_words]
ko = nltk.Text(ko, name='대한민국 국회 의안 제 1809890호')
plt.figure(figsize=(12,6))
ko.plot(50) # 가장 많이 나온 단어 50개
plt.show()

data = ko.vocab().most_common(150) # 가장 많이 등장하는 150
wordclould = WordCloud(font_path='/Library/Fonts/Arial Unicode.ttf', relative_scaling=0.2, background_color='white').generate_from_frequencies(dict(data))
plt.figure(figsize=(12,8))
plt.imshow(wordclould)
plt.axis('off')
plt.show()
'''
# 더 알기!
plt.figure(figsize=(12,6))
ko.dispersion_plot(['육아휴직', '초등학교', '공무원']) # 전체 문서 길이 중 나오는 위치

ko.count('초등학교') # 특정 단어의 빈도수 조사, 6
ko.concordance('초등학교') # 초등학교 좌우 글자
ko.collocations() #연어
'''



Rerference
1) 제로베이스 데이터스쿨 강의자료

profile
데이터 사이언스 / just do it

0개의 댓글