wordcloud

ro_ot ㅣ 2020. 2. 18. 17:03

# 이상한 나라의 앨리스 영문버전 읽어오기

# alice_wordcloud

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

# data/alice.txt 파일 읽어오기
text = open('../data/alice.txt').read()
# print(text)

# data/alice_mask.png 읽어오기
alice_mask = np.array(Image.open('../data/alice_mask.png'))
print(alice_mask)

# said라는 단어는 카운트에서 제외됨
stopwords = set(STOPWORDS)
stopwords.add('said')

# wordcloud 생성
wc = WordCloud(background_color='white', max_words=2000, mask=alice_mask, stopwords=stopwords)
wc = wc.generate(text)
print(wc.words_)        # 최빈단어를 찾는다. Alice가 가장 많이 등장
wc.to_file('alice.png') # alice.png 파일로 저장

# alice 이미지와 wordcloud를 겹쳐서 출력
plt.figure(figsize=(12,12))
plt.imshow(wc)
plt.axis('off')			# X, Y 축이 사라진다
plt.show()

# STAR WARS Episode IV

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

# data/a_new_hope.txt 파일 읽어오기
text = open('../data/a_new_hope.txt').read()
# print(text)

mask_image = np.array(Image.open('../data/stormtrooper_mask.png'))
print(mask_image)

# stopwords에 등록해서 카운트에서 제외함
stopwords = set(STOPWORDS)
stopwords.add('int')
stopwords.add('ext')

# wordcloud 만들기
wc = WordCloud(background_color='white', max_words=300, mask=mask_image, stopwords=stopwords).generate(text)
print(wc.words_)                # 빈도수를 구해준다
wc.to_file('starword.png')      # wordcloud결과를 startwords.png 파일로 저장함

plt.figure(figsize=(8,8))
plt.imshow(wc)
plt.axis('off')     # X, Y의 축이 사라진다.
plt.show()

 

wordcloud

# java가 설치 돼 있어야 한다.

import nltk
from konlpy.corpus import kobill

# KoNLPy모듈에 내장된 법안 문서 읽어오기
filres_ko = kobill.fileids()
doc_ko = kobill.open('1809890.txt').read()
# doc_ko = open('hong.txt').read(0          # hong.txt 파일 읽어오기
print(doc_ko)

# Twitter 분석기로 명사 추출 : KoNLPy버전에 따른 경고 메세지 출력
# UserWarning: "Twitter" has changed to "Okt" since KoNLPy v0.4.5.
# warn('"Twitter" has changed to "Okt" since KoNLPy v0.4.5.')
# from konlpy.tag import Twitter; t = Twitter()
from konlpy.tag import Okt; t = Okt()
tokens_ko = t.nouns(doc_ko)
print(tokens_ko)

# 명사로 파싱된 변수를 읽어온다.
ko = nltk.Text(tokens_ko, name='대한민국 국회 의안 제 1809890호')
print(len(ko.tokens))           # 수집된 단어의 총 갯수
print(len(set(ko.tokens)))      # 중복을 제외한 단어 갯수

import matplotlib.pyplot as plt
import matplotlib

# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'

# 각 단어들의 빈도수를 그래프로 출력
plt.figure(figsize=(12,6))
ko.plot(50)         # 빈도수가 높은 단어 50개를 그래프에 출력
plt.show()

# 위 그래프의 출력 결과를 보고, 불필요한 stopwords 등록해서 제거한다,
# 영어와 달리 한글을 stopword를 지정하는 것은 쉽지않다.
# case-by-case 로 stopword를 등록하자
stop_words = ['.', '(',')',',',"'",'%','-','X',').','x','의','자','에','안','번','호','을','이','다','만',
              '로','가','를','액','세','제','위','월','수','중','것','표','명']

ko = [each_word for each_word in ko if each_word not in stop_words]

# stopword를 등록한 다음에 다시 그래프를 그려보자
ko = nltk.Text(ko, name='대한민국 국회 의안 제 1809890호')
plt.figure(figsize=(12,6))
ko.plot(50)                 # 빈도수가 높은 단어 50개를 그래프에 출력
plt.show()

# wordcloud 그리기
data = ko.vacab().most_common(150) #wordcloud로 출력할 단어의 갯수 150개
from wordcloud import WordCloud

wordcloud = WordCloud(font_path='c:/Windows/Fonts/malgun.ttf', relative_scaling=0.2,
                      background_color='white',).generate_from_frequencies(dict(data))
print(wordcloud.words_)
plt.figure(figsize=(12,8))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

* 한글자를 stopword로 제거한다

 

'python' 카테고리의 다른 글

Python 변수  (0) 2020.09.29
python 가상환경(pyenv)  (0) 2020.06.12
웹 API  (0) 2020.02.21
crawling and scraping  (0) 2020.02.20
google API(지도활용)  (0) 2020.02.20