뭉게뭉게 단어구름, wordcloud
Wordcloud란
- 자주 등장하는 텍스트를 중요도나 인기도를 고려해 표현한것
- 자연어 문장에서 키워드를 추출
- 키워드가 등장한 빈도를 측정
- 앞에서 전처리한 정보와 Wordcloud 라이브러리를 바탕으로 Wordcloud 생성
- konlpy 설치
pip install wordcloud
pip install konlpy
- 필요한 라이브러리 호출
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from collections import Counter
from konlpy.tag import Hannanum
- 워드클라우드를 만드는데 애국가 사용
national_anthem = """
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
남산 위에 저 소나무 철갑을 두른 듯
바람 서리 불변함은 우리 기상일세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
가을 하늘 공활한데 높고 구름 없이
밝은 달은 우리 가슴 일편단심일세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
이 기상과 이 맘으로 충성을 다하여
괴로우나 즐거우나 나라 사랑하세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
"""
- 형태소 분석기를 통해 명사만 추출해보기
hananum = Hannanum()
nouns = hananum.nouns(national_anthem)
- Counter를 이용해 nouns 갯수세기
counter = Counter(nouns)
print(counter)
- Wordcloud이용해 시각화하기
wordcloud = WordCloud(
font_path='C:\Windows\Fonts\malgun.TTF' # 한글 깨짐 현상 해결(윈도우)
)
img = wordcloud.generate_from_frequencies(counter)
plt.imshow(img)
해시코드 질문 키워드 워드 클라우드로 만들어보기
- 페이지 요청 보낸후 키워드 내용 크롤링 해오기(한큐에)
import requests
from bs4 import BeautifulSoup
user_agent = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}
import time
questions = []
for i in range(1, 6):
res = requests.get(f'https://hashcode.co.kr/?page={i}', {"User-Agent": user_agent})
soup = BeautifulSoup(res.text, 'html.parser')
parsed_datas = soup.find_all('li', 'question-list-item')
for data in parsed_datas:
questions.append(data.h4.text.strip())
time.sleep(0.5)
print(questions)
- 필요한 라이브러리 불러오기
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from collections import Counter
from konlpy.tag import Hannanum
- 형태소 분석기를 통해 키워드에서 명사 추출
words = []
hananum = Hannanum()
for question in questions:
nouns = hananum.nouns(question)
words += nouns
print(len(words))
- counter를 이용해 단어 갯수 세기
counter = Counter(words)
- 워드 클라우드 생성하기
wordcloud = WordCloud(
font_path='C:\Windows\Fonts\malgun.TTF',
background_color='white',
width=1000,
height=1000
)
img = wordcloud.generate_from_frequencies(counter)
plt.imshow(img)