실습 전 준비사항 (미리 깔아둬야하는 패키지 등)
☞ [Python 머신러닝] 10장. 텍스트 마이닝 (Text Mining) 개요 & 패키지 준비
< 실습한 내용 >
1. 형태소 분석 (konlpy)
2. 시각화 (word cloud)
3. 뉴스 페이지 크롤링한 데이터 시각화
* 형태소 : 언어에 있어서 분해 가능한 최소한의 의미를 가진 단위
1. 형태소 분석 (konlpy)
from konlpy.tag import Kkma # class
# 1. Kkma object
kkma = Kkma()
# 2. 문단 -> 문장 (sentences)
para = "형태소 분석을 시작합니다. 나는 홍길동 이고 age는 28세 입니다."
ex_sent = kkma.sentences(para)
len(ex_sent) # 문장 2개
ex_sent
# ['형태소 분석을 시작합니다.', '나는 홍길동 이고 age는 28세 입니다.']
# 3. 문단 -> 단어 (nouns)
ex_nouns = kkma.nouns(para)
len(ex_nouns) # 단어 7개
ex_nouns
# ['형태소', '분석', '나', '홍길동', '28', '28세', '세']
# 4. 문단 -> 형태소 추출
ex_pos = kkma.pos(para)
ex_pos
# 'NNG 일반 명사, NNP 고유 명사, NP 대명사' 만 추출하기
text_data = []
for (text, tclass) in ex_pos : # ('형태소', 'NNG')
if tclass == 'NNG' or tclass == 'NNP' or tclass == 'NP' :
text_data.append(text)
text_data # ['형태소', '분석', '나', '홍길동']
2. 시각화 (word cloud)
"""
시각화 진행 순서
1. text file 읽기
2. 명사 추출
3. 전처리 : 단어 길이 제한, 숫자 제외
4. word cloud 시각화
"""
from konlpy.tag import Kkma
# object 생성
kkma = Kkma()
# 1. text file 읽기
file = open("../data/text_data.txt", mode='r', encoding='utf-8')
doc = file.read()
file.close()
doc
# 2. doc -> sentence
ex_sent = kkma.sentences(doc)
ex_sent
# 3. doc -> noun
ex_nouns = kkma.nouns(doc)
ex_nouns
# 4. sentence -> noun
from re import match # 전처리 위해서 정규표현식 관련 re 패키지 import
nouns = []
for sent in ex_sent :
for noun in kkma.nouns(sent) :
# 단어 전처리 : 2음절 이상, 수사 제외
if len(str(noun)) >= 2 and not(match('^[0-9]', noun)) :
nouns.append(noun)
nouns
# ['형태소', '분석', '데이터', '분석', '직업', '데이터', '분석', '전문가', '기법', '초반', '개발', '기술']
# 5. word count : dict
word_count = {} # 빈 set
for noun in nouns :
word_count[noun] = word_count.get(noun, 0) + 1
word_count
# 6. top_n
from collections import Counter
counter = Counter(word_count)
top5 = counter.most_common(5)
top5
# [('분석', 3), ('데이터', 2), ('형태소', 1), ('직업', 1), ('전문가', 1)]
# 7. word cloud
import pytagcloud
import webbrowser
# tag에 color, size, tag 사전 구성
word_count_list = pytagcloud.make_tags(top5, maxsize=80)
# maxsize : 최대 글자크기
print(word_count_list)
pytagcloud.create_tag_image(word_count_list,
'wordcloud.jpg', # 생성될 시각화 파일 이름
size=(900, 600), # 사이즈
fontname='korean', # 한글 시각화를 위해 새로 추가했던 폰트 이름
rectangular=False)
webbrowser.open('wordcloud.jpg') # 저장된 'wordcloud.jpg' 브라우저로 띄워서 보기
3. 뉴스 페이지 크롤링한 데이터 시각화
from konlpy.tag import Kkma
import pickle
# 1. news Crawling 가져오기
# (이전 크롤링에 관한 게시물에서 만들어 저장한 파일)
file = open("../data/data.pickle", mode='rb') # 'rb' : read, binary
crawling_data = pickle.load(file)
crawling_data
len(crawling_data) # 49
# 2. data -> nouns 추출
kkma = Kkma()
ex_nouns = [] # 단어 저장
for sent in crawling_data : # doc -> sentence
for noun in kkma.nouns(sent) : # sentence -> noun
ex_nouns.append(noun)
ex_nouns
len(ex_nouns) # 503
# 3. 명사 전처리 : 2음절 이상, 숫자 제외 -> 단어사전(dict)
from re import match
nouns_count = {} # 빈 set
for noun in ex_nouns :
# 2음절 이상, 숫자 제외
if len(str(noun)) > 1 and not(match('^[0-9]', noun)) :
nouns_count[noun] = nouns_count.get(noun, 0) + 1
nouns_count
# del nouns_count['오늘']
# 4. 단어 카운트
from collections import Counter
counter = Counter(nouns_count)
top10 = counter.most_common(n=10)
top10
# '오늘'이라는 단어 포함 되어 있는데 의미 X => 위로 올라가서 제거하고 다시 top10 뽑음
# 5. word cloud
import pytagcloud
import webbrowser
# tag에 color, size, tag 사전 구성
word_count_list = pytagcloud.make_tags(top10, maxsize=80)
# maxsize : 최대 글자크기
print(word_count_list)
pytagcloud.create_tag_image(word_count_list,
'newsCrawling.jpg',
size=(900, 600),
fontname='korean', rectangular=False)
webbrowser.open('wordcloud.jpg')
'Python 과 머신러닝 > III. 머신러닝 모델' 카테고리의 다른 글
[Python 머신러닝] 10장. 텍스트 마이닝 - (1) 크롤링 (Crawling) (0) | 2019.10.31 |
---|---|
[Python 머신러닝] 10장. 텍스트 마이닝 (Text Mining) 개요 & 패키지 준비 (0) | 2019.10.31 |
[Python 머신러닝] 9장. 추천시스템 (Recommendation System) (0) | 2019.10.30 |
[Python 머신러닝] 8장. 군집분석 (Cluster Analysis) (0) | 2019.10.29 |
[Python 머신러닝] 7장. 앙상블 (Ensemble) - (3) XGBoost (0) | 2019.10.28 |
댓글