본문 바로가기

카테고리 없음

파이썬 워드클라우드

워드클라우드

  1. 텍스트 파일로 저장
    • 데이터 수집
  2. 텍스트 전처리
    • split() 메소드를 사용하여 단어 단위로 나누기
    • 단어별 빈도수 계산하여 딕셔너리 형태로 저장
    • 분석에 의미 없는 조사, 단어 제거
  3. 워드클라우드 만들기

 

1. 텍스트 파일로 저장

- 데이터 수집 : 크롤링을 사용하거나 직접 파일로 저장

- 아직 크롤링을 잘하지 못하여 네이버에 "데이터"를 검색하여 제일 첫 번째 뉴스기사를 복사하여 메모장에 저장함

- 출처 : http://www.kbmaeil.com/news/articleView.html?idxno=950753 

 

패러다임의 전환:디지털 트윈 그리고 미래항공모빌리티 - 경북매일

고등학생 시절, 첫 해외여행을 위해 인천공항에 도착하여 창문 밖으로 보이는 비행기들을 바라보며 느꼈던 그때의 감격은 아직도 가슴을 두근거리게 하는 것 같다. 거대한 비행기가 안전하게

www.kbmaeil.com

 

2. 데이터 전처리

# 파일 읽기
file = open('DATA.txt', 'r', encoding='UTF8')
text = file.read() 
file.close()

# 잘 불러왔는지 확인(100 글자)
text[:100]

'고등학생 시절, 첫 해외여행을 위해 인천공항에 도착하여 창문 밖으로 보이는 비행기들을 바라보며 느꼈던 그때의 감격은 아직도 가슴을 두근거리게 하는 것 같다. 거대한 비행기가 안전하'

 

- split() 메소드 사용하여 단어 단위로 나누기

# 공백을 구분자로 하여 단어 단위로 자르기
wordList = text.split()

# 잘 나누어졌는지 확인(10 개)
wordList[:10]

['고등학생', '시절,', '첫', '해외여행을', '위해', '인천공항에', '도착하여', '창문', '밖으로', '보이는']

 

- 단어 빈도수 계산하여 딕셔너리 형태로 저장

# 중복 단어 제거
worduniq = set(wordList)

# 딕셔너리 선언
wordCount = {}

# 단어별 개수 저장
for w in worduniq:
    wordCount[w] = wordList.count(w)

print(wordCount)
# 제외 대상 조사 
del_word = ['혹은','나는','더','그리고', '또는','통해','되었다','점점', '것이','않고','있으며','수', '날', '하는']

# 제외하기
for w in del_word:
    if w in wordCount:
        del wordCount[w]

=> 빈도수 : 단어 ~~~~ 형태로 저장됨

=> 결과가 너무 많아 생략.

 

3. 워드클라우드 만들기

# 패키지 설치
!pip install wordcloud
# 라이브러리 불러오기
import matplotlib.pyplot as plt
from wordcloud import WordCloud
%config InlineBackend.figure_format='retina'

# 워드 클라우드 만들기
wordcloud = WordCloud(font_path = 'C:/Windows/fonts/HMKMRHD.TTF', 
                      width=2000,
                      height=1000,
                      background_color='white').generate_from_frequencies(wordCount)  ## wordCount 중요

# 표시하기
plt.figure(figsize=(12, 6))
plt.imshow(wordcloud) # wordCloud 중요
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()

=> 워드클라우드 생성

=> 불용어 제거를 완벽하게 하지 않아 의미 없는 단어를 많이 포함하고 있다. 

 

- 추가로 단어 제거 후 워드클라우드 재생성

# 제외 대상 조사 
del_word = ['있다','많은','그','위해', '따라','것','해당','미리', '있는', '관련', '바라보며', '가령', '했던']

# 제외하기
for w in del_word:
    if w in wordCount:
        del wordCount[w]

        
# 워드 클라우드 만들기
wordcloud = WordCloud(font_path = 'C:/Windows/fonts/HMKMRHD.TTF', 
                      width=2000,
                      height=1000,
                      background_color='white').generate_from_frequencies(wordCount)  ## wordCount 중요

# 표시하기
plt.figure(figsize=(12, 6))
plt.imshow(wordcloud) # wordCloud 중요
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()

=> 아직도 무의미한 단어가 포함되어있다.

=> 추후에 자연어 처리에 대해서 공부해서 정확한 정보를 제공할 수 있는 워드클라우드를 만들어봐야겠다.

 

 

- 특정 이미지에 워드클라우드 생성

# 라이브러리 불러오기
import numpy as np
from PIL import Image

# 이미지 불러오기
masking_image = np.array(Image.open('human.jpg'))

# 워드 클라우드 만들기
wordcloud = WordCloud(font_path = 'C:/Windiws/fonts/HMKMRHD.TTF',
                      width=2000, 
                      height=1000, 
                      mask=masking_image,
                      background_color='white').generate_from_frequencies(wordCount)

# 표시하기
plt.figure(figsize=(12, 6))
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()