본문 바로가기
프로그래밍/Python

Python(파이썬) 추출한 명사 빈도를 그림으로 시각화하기(Web Cralwer)

by LiveData 2018. 12. 1.
반응형

0. 이전 시간


Python(파이썬) 특정 단어포함하는 신문기사 웹 크롤러 만들기(Web Cralwer) -1


Python(파이썬) 특정 단어포함하는 신문기사 웹 크롤러 만들기(Web Cralwer) -2


Python(파이썬)크롤링 한 파일에 불필요한 문자 제거(Web Cralwer) -3


Python(파이썬) 명사 분리 추출 후, 단어 사용 빈도 계산기(Web Cralwer)



 



이렇게 명사의 빈도 수 순서대로 파일에 저장해 보았습니다.



이번에는 이 추출한 빈도수를 가지고 더 잘 표현하기 위해 시각화 작업을 해보겠습니다. 





특수문자를 뺀 기사 글로 단어를 추출한 뒤 시각화 해봅시다.





이 위의 기사모음의 명사를 추출하여






이런식으로? 해봅시다!


중요 ! 이 시각화는 python 2.7 버전으로 실행할 수 있습니다.

(3.6 버전으로 실패했습니다. ㅠ 2.7은 성공!)


(3.6 받으신분은 고생좀.. ㅠ 저도 다시2.7 설치하고 환경변수 다시 설정했네요)




1. 시작



먼저 이 시각화 기능은 konlpy 의 기능 중 하나입니다.



이 konlpy 설치법은 아래의 이전 포스트에서 따라해주세요.



konlpy 설치하기




1
2
3
4
5
6
7
8
9
from collections import Counter
import urllib
import random
import webbrowser
 
from konlpy.tag import Twitter
from lxml import html
import pytagcloud # requires Korean font support
import sys
cs













저번시간에 했던 단어를 카운트 하는 Twitter 와 Counter통해서 명사 단어 갯수를 계산하기 위해 import 합니다. 


여기서 pytagcloud가 중요한데 이것은 한글 폰트를 지원하기 위해서 입니다.


아마 import 하기 위해서는 CMD에서


pip install pytagcloud


pip install pygame 을 설치 하셔야 할겁니다. (제 기억속으론)


안할경우 컴파일 창에 설치하라고 오류메세지가 나올꺼에요.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
= lambda: random.randint(0,255)
# 글씨의 랜덤색깔
color = lambda: (r(), r(), r())
 
def get_tags(text, ntags=50, multiplier=3): #전에 했던 명사 탐색
    spliter = Twitter()
    nouns = spliter.nouns(text)
    count = Counter(nouns)
    return [{ 'color': color(), 'tag': n, 'size': (c*multiplier)/2 }\
                for n, c in count.most_common(ntags)]
 
def draw_cloud(tags, filename, fontname='Noto Sans CJK', size=(800600)):
    pytagcloud.create_tag_image(tags, filename, fontname=fontname, size=size)
    webbrowser.open(filename)
#그림 그리기
cs



















get_tags 함수는 텍스트를 입력받아 최대 50개의 명사 단어 갯수를 찾아냅니다.


이 함수는 아마 전에 명사 빈도 수와 유사합니다.


다만 return 값에 랜덤형 색상을 받는 color변수와 명사를 의미하는 tag 명사 빈도 수에 따라 다른 size가


반환형 됩니다. 여기서 multiplier로 이미지 크기에 맞게 폰트 사이즈를 조절해 주셔야 합니다.



draw_cloud는 get_tags의 반환된 리턴값과 폰트, 그리고 그림 사이즈를 입력한 후 


그것에 맞게 pytagcloud의 함수가 그림을 그려줍니다.






Main


1
2
3
4
5
6
7
8
9
10
def main():
    text_file=open("out_cleand.txt",'r')
    text=text_file.read()
    tags = get_tags(text)
    draw_cloud(tags, 'wordcloud.png')
 
    text_file.close()
 
if __name__=="__main__":
    main()
cs













첨부파일에 해놓은 out_cleand.txt wordcloud.png 를 다운 받은 후 메인을 실행하시면 됩니다.


메인은 out_cleand.txt 파일을 열고 get_tags가 명사 빈도수를 찾고 


draw_cloud가 wordcloud.png의 그림형식에 맞게 그림을 그려줍니다.







결    과








하지만 처음 실행시켜 보면 이런 오류가 뜰겁니다.






오류 해결 하러하기


반응형