-
Python - 한글 형태소로 워드클라우드 시각화Programming & Machine Learning/Python X 머신러닝 2017. 8. 22. 00:09
워드클라우드는 자연어 분석과정에서 흔히 사용하는 기초적이며 간단한 시각화 방법이다.
패키지를 사용한다면 구현이 매우 간단함과 동시에,
tf-idf나 word2vec처럼 사람이 직관적으로 관찰하기 힘든 알고리즘을 주로 사용하는 자연어 분석 영역에서
매우 유용한 시각화 툴이기 때문이다.
python에서도 여러 워드클라우드 모듈을 제공하지만, KoNLP에서는 pytagcloud를 이용한 시각화 튜토리얼을 제안한다.
http://konlpy.org/ko/v0.4.3/examples/wordcloud/
위 링크에 나와있는 튜토리얼을 기반으로, input text data를 형태소 기반으로 처리하며,
동시에 불용어까지 제거하여 tokenize 해주는 코드를 추가하여 사용해보았다.
import random import webbrowser import pytagcloud # requires Korean font support import sys from collections import Counter def removeNumberNpunct(doc): text = ''.join(c for c in doc if c.isalnum() or c in '+, ') text = ''.join([i for i in text if not i.isdigit()]) return text def tokenize(doc): return [t[0] for t in pos_tagger.pos(removeNumberNpunct(doc), norm=True, stem=True) if t[0] not in stopwords] r = lambda: random.randint(0,255) color = lambda: (r(), r(), r()) def get_tags(text, ntags=50, multiplier=1): count = Counter(text) return [{ 'color': color(), 'tag': n, 'size': int(c*multiplier*0.03) }\ for n, c in count.most_common(ntags)] def draw_cloud(tags, filename, fontname='Noto Sans CJK', size=(800, 600)): pytagcloud.create_tag_image(tags, filename, fontname=fontname, size=size) webbrowser.open(filename)
df_docs = [(tokenize(row['text']), row['label']) for index, row in df.iterrows()] token = [t for d in df_docs for t in d[0]] tags = get_tags(token) draw_cloud(tags, 'wordcloud.png')
참고 : input data set은 df로, Dataframe의 형태이다. (불용어 사전은 stopwords)
input text 데이터에서 숫자, 특수문자를 제거한 뒤 불용어 사전(한국어 형태로소 구성)으로 필터링한 단어들을 워드클라우드로 표현하는 코드이다.
특이점은 pytagcloud 패키지를 사용할 때, 간혹 한글이 깨지는 경우가 있는데
fontname='Noto Sans CJK'
이 부분에서 패키지 내에 폰트가 설치되어 있지 않은 경우가 있다는 것이다. 특히 OSX에서는 거의 대부분 오류가 날 것이다.
이를 해결하기 위해서는 라이브러리가 설치된 경로, site-packages/pytagcloud/fonts 로 폰트 파일을 넣어준 뒤, js파일을 수정해주어야 한다.
필자의 경우, 아래와 같은 경로가 라이브러리가 설치된 경로이다. (아나콘다 가상환경)
/anaconda/envs/bigpie/lib/python3.6/site-packages/pytagcloud/fonts
예제의 코드에서는 Noto Sans CJK라는 폰트를 사용했지만, 확실한 테스트를 위해서 나눔고딕 폰트를 넣어보자.
네이버에서 나눔고딕 폰트를 ttf 파일로 다운받은 후, 폴더 내에 복사하여 넣어준다.
다음으로 fonts.json 파일을 수정해주자. 필자는 vi 편집기로 간단하게 편집했다. (윈도우는 sublime text등의 에디터로 하는 것을 권장)
{
"name": "Korean",
"ttf": "NanumGothic.ttf",
"web": "http://fonts.googleapis.com/earlyaccess/nanumgothic.css"
},
이 부분을 추가해주면 된다.
web은 웹폰트 링크인데, 웹폰트 링크가 없는 폰트는 아마 잘 실행되지 않는 것 같다.
그리고 다시 위의 예제코드를 수정하여 실행하면 에러가 발생하지 않고, 다음처럼 시각화된 wordcloud.png 파일이 작업 디렉토리에 생성된다.
[ fontname='Noto Sans CJK' 를 fontname='Korean'으로 바꿔준다. ]
'Programming & Machine Learning > Python X 머신러닝' 카테고리의 다른 글
파이썬 기초 문법 - 5 (format, map, isinstance 함수) (0) 2018.04.04 BeautifulSoup4를 이용한 파이썬 크롤링 (1) 2018.03.26 SVM의 개념 및 Python에서의 사용 (2) 2017.08.10 인공뉴런(퍼셉트론, 에이다라인)과 그래디언트 디센트(Gradient Descent)의 개념 및 구현 (0) 2017.08.03 Mini Batch Processing 방식의 구현과 학습모델의 임베딩 (0) 2017.08.02 댓글