워드 클라우드(Word Cloud)란?

  • 핵심 단어를 시각화 하는 기법
  • 문서의 키워드, 개념 등을 직관적으로 파악할 수 있게 핵심 단어를 시각적으로 돋보이게 하는 기법을 말합니다.

실습

1. 코렙에서 워드 클라우드 설치방법

!pip install wordcloud

 

2. text파일 생성

text = open('/content/drive/MyDrive/KDT v2/9. 자연어 처리/data/alice.txt').read()
text

 

3. 모듈 임포트

from wordcloud import WordCloud

 

4. 활성화 및 객체 생성

wordcloud = WordCloud().generate(text)
wordcloud

# 결과값 : 
<wordcloud.wordcloud.WordCloud at 0x7aaaf2977400>

# generate() : 단어별 출현 빈도수를 비율로 반환하는 객체를 생성하는 함수 입니다.

 

5. 특정단어의 %를 출력

wordcloud.words_

# words_ : 특정단어의 %(비율)을 보여주는 함수입니다.

내부 단어가 많아 일정치만 찍었습니다.

 

6. matplotlib 임포트

import matplotlib.pyplot as plt

 

7. plt를 이용하여 이미지 출력

plt.figure(figsize=(15, 10))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

 

8. 객체를 생성할 대 파라미터를 추가하여 생성

wordcloud = WordCloud(max_words=100).generate(text)
plt.figure(figsize=(15, 10))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

# max_words : 워드 클라우드에 표시되는 단어의 개수를 설정합니다.

 

9. 나눔체 설치

!apt-get update -qq
!apt-get install fonts-nanum* -qq

※ 설치 완료 후 런타임 재실행 하시면 됩니다.

 

10. font_manager 임포트

import matplotlib.font_manager as fm

 

10-1. Nanum체 확인

sys_font = fm.findSystemFonts()
[f for f in sys_font if 'Nanum' in f]

 

11. 폰트 설치 후 wordcloud 다시 생성

wordcloud = WordCloud(max_words=100,
                      font_path='/usr/share/fonts/truetype/nanum/NanumPen.ttf').generate(text)
plt.figure(figsize=(15, 10))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()


이미지를 이용하여 내용을 추가하기

1. 필요 모듈 임포트

from PIL import Image
import numpy as np

 

2. 이미지를 array배열로 변환

alice_mask = np.array(Image.open('/content/drive/MyDrive/KDT v2/9. 자연어 처리/data/alice_mask.png'))
alice_mask

# 결과값 : 
array([[255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255],
       ...,
       [255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255]], dtype=uint8)

 

3. 워드 클라우드 생성

wordcloud = WordCloud(max_words=100,
                      font_path='/usr/share/fonts/truetype/nanum/NanumPen.ttf',
                      mask=alice_mask,
                      background_color='ivory').generate(text)
plt.figure(figsize=(15, 10))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()


대한민국 지도에 찍어보기

1. 모듈 임포트 및 파일 읽어오기

# kolaw에서 constitution.txt 파일을 읽어오기
from konlpy.corpus import kolaw
text = kolaw.open('constitution.txt').read()

 

2. okt 분석기를 이용하여 파일 내용 중 명사만 추출하기

from konlpy.tag import Okt
okt = Okt()
noun_text = okt.nouns(text)
print(noun_text)

 

3. 단어의 길이를 기준으로 오름차순 정렬 후 저장

noun_text.sort(key=lambda x: len(x))
print(noun_text)

 

4. 불용어를 제외한 단어만 저장

stopword = ['얻지','범한','즈음','가지','자주','이제','붙이','도하','일로','거나','로부터','날로','이내','다운','내지','로서','로써']
noun_test = [word for word in noun_text if word not in stopword]

 

5. 2글자 이상만 저장

noun_text = [word for word in noun_text if len(word) > 1]

 

6. 빈도수가 많은 TOP 100만 저장

from collections import Counter

count = Counter(noun_text)

 

7. 워드 클라우드 생성

kor_mask = np.array(Image.open('/content/drive/MyDrive/KDT v2/9. 자연어 처리/data/korea_mask.jpg'))

wordcloud = WordCloud(max_words=100,
                      font_path='/usr/share/fonts/truetype/nanum/NanumPen.ttf',
                      mask=kor_mask,
                      background_color='ivory').generate_from_frequencies(data)
plt.figure(figsize=(15, 10))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()


자연어 처리의 다양한 Task

 

1. Text Classification

  • 단어, 문장, 문서 단위의 텍스트에 사전 정의된 카테고리를 할당하는 작업
    • Sentiment Analysis : 주어진 문장의 감정을 분류
    • Abusing Detection : 주어진 문장의 어뷰징(나쁜뜻, 비속어등) 여부를 판별합니다.

2. Information Retrieval and Document Ranking

  • 두 문서나 문장 간 유사도를 결정하는 작업
  • Text Similarity Task는 document DB가 있을 때 query text에 대하여 가장 유사한 문서를 반환하는 것을 목표로 하는 작업으로 확장될 수 있음

3. Text to Text Generation

  • 텍스트를 입력으로 받아서 목표를 달성하는 텍스트를 생성하는 작업
    • 소스 언어의 텍스트의 의미를 유지한채 타켓 언어의 텍스트로 번역하는 작업
    • 여러 문서들의 의미를 유지한 채 더 짧은 버전의 테스트로 요약하는 작업
    • 포괄적인 관점에서 사람이 작성한 것 같은 텍스트를 생성하는 작업

4. Knowledge bases, Entities and Relations

  • 자식 기반, 의미론적인 엔티티나 관계를 파악하는 자연어처리 분야

5. Topics and Keywords

  • 문서 혹은 문장 내의 주제나 키워드를 파악하는 자연어 처리 분야

6. Chatbots

  • 음성이나 문자를 통한 인간과의 대화를 통해 특정한 작업을 수행하도록 제작된 컴퓨터 프로그램
  • 정해진 규칙에 맞춰 메세지를 입력하면, 발화를 출력하는 규칙 기반 챗봇부터 문맥을 입력으로 받아 적절한 답변을 생성/검색하는 인공지능 기반 챗봇 등이 있음

7. Text Reasoning

  • 주어진 지식이나 상식을 활용하여 일련의 추론 작업을 수행하는 작업
  • 간단한 수학 문제들을 푼다고 생각해보면 일련의 계산 과정에 의해 답을 도출하게 되는데, 그러한 일련의 계산 과정을 추론 과정이라고 함

8. FAke News and Hate Speech Detecion

  • 허위 혹은 오해의 소지가 있는 정보가 포함된 텍스트를 감지하고 필터링하는 작업
  • 소셜 미디어 혹은 배포 중인 제품에서 발생하는 어뷰징 컨텐츠들을 필터링하기 위해 사용

9. Text to Data and Vice-versa

  • 음성을 텍스트(STT)로 혹은 텍스트를 음성(TTS)으로 변환하는 작업이나, 텍스트를 이미지(Text to Image)로 변환하는 작업 등이 실무, 학회에서 많이 논의됨.