# Quiz 1 : 앞에서 학습한 Classifier 모델을 불러온다
# >> './data/classifiers.model' --> classifier
import pickle
classifier = "=Quiz!="
# Quiz 2 : 분류기준 단어목록 불러오기
# >> './data/selected.words' --> selected_words
selected_words = "=Quiz!="
# Tokenizer 생성/ 판단모듈
from konlpy.tag import Twitter
twitter = Twitter()
# 문단을 긍부정 분석용 Token 생성하기
def tokenize(doc):
doc = ['/'.join(t) for t in twitter.pos(doc, norm=True, stem=True)]
return {'exists({})'.format(word): (word in set(doc)) for word in selected_words}
# 위에서 생성한 Token을 활용하여 판단하기
def classify_text(text):
tokens = tokenize(text) # 트위터로 Stemming/ Taggging 후 Selected_word 판단결과 객체
return classifier.classify(tokens) # 분류모델 평가
# 데이터와 모델, 함수를 활용하여 긍/부정 Test
# 0 : 부정모델 , 1 : 긍정모델
text = """영화가 재미있어요"""
# 학습 데이터를 활용하여 text 내용 긍/부정 판단
result = classify_text(text)
if result == '1':
print('긍정리뷰')
else:
print('부정리뷰')
# 외부뉴스 데이터 수집하기
from txtutil import Naver_news_rep
# news_url = "https://news.naver.com/main/hotissue/read.nhn?mid=hot&" +\
# "sid1=&cid=1064721&iid=3227816&oid=001&aid=0010068060&ptype=021"
# replies = Naver_news_rep(news_url)
# import pickle
# pickle.dump(replies, open('./data/naver_news.rep', 'wb'))
# Quiz 3 : 네이버 뉴스 댓글 저장데이터 불러오기
# >> './data/naver_news.rep' --> data
import pickle
data = pickle.load(open('./data/naver_news.rep', 'rb'))
data[:5]
# 전체 댓글 갯수중 긍정/ 부정 갯수 계산하기
pro, con = [], []
for datum in data:
if classify_text(datum) == "1":
pro.append(datum)
else:
con.append(datum)
# 긍정 / 부정 분류된 데이터를 Json 과 같은 형태로 정리
result = {}
result["긍정"] = pro
result["부정"] = con
# 긍정리뷰 갯수
len(result["긍정"])
# 부정리뷰 갯수
len(result["부정"])
# 긍정 댓글을 구분하여 분류한 뒤
# 명사, 형용사, 동사 Token만 추출하기 (전처리 / Token의 예외처리는 미포함)
texts = result['부정']
texts[:3]
%%time
filtered_tokens = ""
# 명사, 형용사, 동사 Filtering
for text in texts:
for txt in text[0].split(' '):
tokens = twitter.pos(text ,stem=True)
tokens = [token[0] for token in tokens
if (token[1] in ['Noun','Adjective','Verb']) and (len(token[0]) > 1 )]
tokens = " ".join(tokens)
filtered_tokens += tokens
print(filtered_tokens[:300])
from nltk.tokenize import word_tokenize
filtered_tokens = word_tokenize(filtered_tokens)
# nltk.Text() 객체를 활용
# 상위 빈도수 20인 Token을 추출
import nltk
pos_nltk = nltk.Text(filtered_tokens, name='부정댓글')
pos_nltk.vocab().most_common(20)