하나의 단어가 자주 반복된다는 것은 중요도가 높다는 걸 의미한다.
이를 그래픽으로 구현하는 방법을 설명하고자 한다.
인스톨
pip install wordcloud
pip install konlpy
|
import
from wordcloud import WordCloud
from konlpy.tag import Okt
import matplotlib.pyplot as plt
|
Tokenize
okt.nouns() 를 이용해 명사만 추출
text = "경찰이 음주 운전을 단속하는 과정에서 해프닝도 일어났다. 50대 여성 C씨가 1차 음주 운전 측정에서 적발됐는데 이는 구강 청정제를 측정 전 바로 사용했기 때문이다. C씨는 '갑자기 측정기에 불면 예의가 아닌 것 같아 구강 청정제를 입 안에 뿌린 상태로 불었다”며 “이런 경우가 처음이라 황당하다'고 말했다. 또 다른 운전자 D씨는 음주 측정 30분 전에 양치를 했다가 1차 측정에서 적발되기도 했다. 이날 상암동 현장에서는 심각한 교통위반이 비교적 덜 나왔지만, 다른 지역에선 음주운전과 신호위반 등 운전자가 대거 적발됐다. 이날 같은 시간 서울 관내 총 29개 경찰서가 47곳에서 일제 음주단속을 벌인 결과 3명이 단속돼 모두 면허 정치 처분을 받았다. 또한 신호위반 84건, 보행자 보호위반 8건 등이 적발됐다. 한편 경찰은 이날 오후 1시 30분부터 서울 마포구 상암동의 하늘 초등학교 앞에서 교통안전 캠페인도 벌였다. 개학을 맞은 학생들과 학생들의 등하교를 맡은 보호자들에게 다시 한 번 안전의 중요성을 일깨우기 위해서다. 마포경찰서 관계자를 비롯해 교통안전공단, 마포구청, 녹색어머니회 등 관계자 40명이 초등학생들에게 ‘어린이 교통안전 수칙’ 등의 내용이 담긴 전단을 나눠줬다. 이 학교에 재학 중인 8세, 11세의 자녀를 둔 현모(46)씨는 “아직도 스쿨존에서 속도를 안 지키는 분들이 더러 있어 저부터 예민해질 때가 많다”면서 “아이들한테 이렇게 사전 교육하는 취지 자체는 좋다”고 말했다. 경찰 관계자는 '신호위반, 보행자보호의무 위반 등 어린이 보행 안전을 위협하는 교통법규 위반행위 엄정단속과 함께 캠페인 및 교육을 병행해 어린이 교통사고 예방을 위해 최선을 다하겠다'고 밝혔다."
okt = Okt()
word_tokens = okt.nouns(text)
print(word_tokens)
|
▶ ['경찰', '음주', '운전', '단속', '과정', '해프닝', '여성', '씨', '차', '음주', '운전', '측정', '적발', '구강', '청정', '제', '측정', '전', '바로', '사용', '때문', '씨', '갑자기', '측정기', '불면', '예의', '것', '구강', '청정', '제', '입', '안', '상태', '며', '경우', '처음', '고', '말', '또', '다른', '운전자', '씨', '음주', '측정', '전', '양치', '차', '측정', '적발', '기도', '날', '상암동', '현장', '교통위반', '비교', '덜', '다른', '지역', '음주운전', '신호', '위반', '등', '운전자', '대거', '적발', '날', '시간', '서울', '관내', '총', '개', '경찰서', '곳', '일제', '음주', '단속', '결과', '명', '단속', '모두', '면허', '정치', '처분', '또한', '신호', '위반', '건', '보행자', '보호', '위반', '건', '등', '적발', '한편', '경찰', '날', '오후', '서울', '마포구', '상암동', '하늘', '초등학교', '앞', '교통', '안전', '캠페인', '개학', '학생', '학생', '등하교', '보호자', '다시', '번', '안전', '중요성', '일', '위', '마포', '경찰서', '관계자', '비롯', '교통', '안전', '공단', '마포', '구청', '녹색', '어머니', '회', '등', '관계자', '명', '초등학생', '어린이', '교통', '안전', '수칙', '등', '내용', '전단', '이', '학교', '재학', '중인', '세', '세', '자녀', '현모', '씨', '스쿨존', '속도', '안', '분', '더러', '저', '때', '면서', '아이', '사전', '교육', '취지', '자체', '고', '말', '경찰', '관계자', '신호', '위반', '보행자', '보호', '의무', '위반', '등', '어린이', '보행', '안전', '위협', '교통법규', '위반', '행위', '엄정', '단속', '캠페인', '및', '교육', '병행', '어린이', '교통사고', '예방', '위해', '최선', '고']
폰트지정
한글의 경우 폰트를 지정하지 않으면 한글이 깨지게 된다.
https://brunch.co.kr/@jade/203 에 가서 맘에드는 폰트를 다운로드하여 같은 폴더에 넣어 주자.
font = './Binggrae.ttf'
|
WordCloud
stopWords 를 지정하여 제거하고 싶은 불필요한 명사들을 제거 (여기서는 전부 사용)
단어들을 스페이스로 연결하여 하나의 스트링으로 작성
stopWords = []
word_string = " ".join(word_tokens)
stopwords=set(stopWords), min_font_size=5,
collocations=False, background_color='white', max_words=400).generate( word_string )
|
그래픽 생성
figure = plt.figure(figsize=(15,10))
plt.imshow(word_cloud)
plt.tick_params(labelbottom=False, labelleft=False)
plt.xticks([])
plt.yticks([])
plt.show(
|
▶
'자연언어처리 (NLP)' 카테고리의 다른 글
nltk.NaiveBayesClassifier 를 이용한 스팸메일 분류 (0) | 2024.04.07 |
---|---|
Naive Bayes Classifier 설명 (0) | 2024.04.05 |
stopwords (0) | 2024.03.13 |
워드 토큰화 (0) | 2024.03.13 |
(Word2Vec) model training (1) | 2023.12.21 |