# 이상한 나라의 앨리스 영문버전 읽어오기
# 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 |