# konlpy 설치 pip install konlpy import os from konlpy.tag import Okt from collections import Counter # Okt 형태소 분석 객체 생성 ok_twitter = Okt() # 저장된 파일의 위치 탐색 후, file변수에 저장 file = open('./drive/MyDrive/machine_learning_data/Naver_opinion.txt','r',encoding='utf-8') total_lines = file.readlines() # txt파일을 줄 단위로 읽음 file.close() print(total_lines) >['휴잭맨의. 매력이 한껏 돋보인 영화입니다.다른 출연자들도 너무 멋지구요.사람은 누구나 소중하며, 현재를 멋지... # 크롤링 댓글파일 가져와서 reply_text 리스트에 저장 reply_text = [] for line in total_lines: reply_text.append(line[:-1]) # 형태소 분류하고 확인 하기 sentences_tag = [] for sentence in reply_text: morph = ok_twitter.pos(sentence) sentences_tag.append(morph) print(morph) # 분석된 1건 결과 확인 print('-' * 30) >[('스토리', 'Noun'), ('는', 'Josa'), ('좀', 'Noun'), ('뻔하지만', 'Adjective'), ('화려하고', 'Adjective'), ('노래', 'Noun'), ('도', 'Josa'), ('너무', 'Adverb'), ('좋아', 'Adjective'), ('시간', 'Noun'), ('가는줄', 'Verb'), ('몰랐다', 'Verb')] >------------------------------ # 명사만 출력해 보기 for my_sentence in sentences_tag: for word, tag in my_sentence: if tag in ['Noun']: print(word) >남자배우 스토리 감동 작품 만 품위 즐거움 무조건 # 필요한 품사만 추출해보기(명사를 bucket list에 담기) bucket_list = [] for my_sentence in sentences_tag: for word, tag in my_sentence: if tag in ['Noun']: bucket_list.append(word) print(bucket_list) >['휴잭맨', '매력', '영화', '다른', '출연자', '사람', '누구', '현재', '메세지', '정말', '인생', '최고', '영화'... # 단어 빈도수 구하기 # 각 원소의 출현 횟수를 계산하는 Counter 모듈을 활용한다. from collections import Counter counts = Counter(bucket_list) print(counts) >Counter({'영화': 1106, '노래': 349, '최고': 320, '음악': 216, '정말': 192... # 명사 빈도 순서대로 상위 30개 출력 print(counts.most_common(30)) >[('영화', 1106), ('노래', 349), ('최고', 320), ('음악', 216), ('정말', 192),... # 명사와 형용사를 모두 추출하고 상위 50개를 출력 bucket_list_2 = [] for my_sentence in sentences_tag: for word, tag in my_sentence: if tag in ['Noun','Adjective']: bucket_list_2.append(word) counts = Counter(bucket_list) print(counts.most_common(50)) >Counter({'영화': 1106, '노래': 349, '최고': 320, '음악': 216, '정말': 192, '감동': 191, '인생': 183,...
WordCloud
1.워드클라우드(word cloud)는 자주 나타나는 단어들의 크기를 상대적인 크기로 시각화 하여 보여줌으로써 많이 사용되는 단어의 영향력을 한 눈에 알 수 있도록 제공
2.필요한 라이브러리
- konlpy.tag(형태소 분석을 통해 명사 추출)
- pytagclud 패키지(워드클라우드 그림 그리기) 또는 wordcloud 1.8.1 패키지
WordCloud 패키지 활용
# pip install wordcloud # 크롤링한 댓글 파일 가져와서 리스트 변수에 저장 from konlpy.tag import Okt from wordcloud import WordCloud from PIL import Image import numpy as np with open('./drive/MyDrive/machine_learning_data/Naver_opinion.txt','r') as f: reply = f.readlines() # 크롤링한 댓글파일 가져와서 리스트 변수에 저장 # 반드시 문자 사이 공백을 넣어야지 wordcloud에서 분석 가능!! ok_twitter = Okt() text = '' for sentence in reply: for noun in ok_twitter.nouns(sentence): text += noun+' ' print(text) > 휴잭맨 매력 영화 다른 출연자 사람 누구 현재 메세지 정말 인생 최고 영화 남 기립박수 뻔 강추 노래 진짜 쩐다... # 크롤링한 댓글파일 가져와서 리스트 변수에 저장 # 배경이 흰색인 마스크 이미지 mask_image = np.array(Image.open('./drive/MyDrive/machine_learning_data/dolphine.jpg')) wc = WordCloud( font_path='./drive/MyDrive/machine_learning_data/NanumBarunGothic.ttf', # 사용할 폰트 background_color='white', # 배경색 max_words=100, # 최대 빈도수를 기준으로 출력할 단어 수 mask=mask_image, # 마스크 이미지 max_font_size=70, # 최대 폰트 크기 colormap='hsv' # 컬러 스타일 ex)'Accent', 'Accent_r', 'Blues', 'Blues_r' 등등 ).generate(text) wc.to_file('./drive/MyDrive/machine_learning_data/wc_result.png')
# 다른 스타일 적용해보기(Accent_r) from konlpy.tag import Okt from wordcloud import WordCloud from PIL import Image import numpy as np with open('./drive/MyDrive/machine_learning_data/Naver_opinion.txt','r') as f: reply = f.readlines() ok_twitter = Okt() text = '' # 필요없는 단어는 아래와 같이 제외 시킬 수 있다. for sentence in reply: for noun in ok_twitter.nouns(sentence): if noun not in ['그','아주','나','거','임','위','이','수','때','것','남','더']: text += noun+' ' mask_image = np.array(Image.open('./drive/MyDrive/machine_learning_data/dolphine.jpg')) wc = WordCloud( font_path='./drive/MyDrive/machine_learning_data/NanumBarunGothic.ttf', # 사용할 폰트 background_color='white', # 배경색 max_words=100, # 최대 빈도수를 기준으로 출력할 단어 수 mask=mask_image, # 마스크 이미지 max_font_size=70, # 최대 폰트 크기 colormap='Accent_r' # 컬러 스타일 ex)'Accent', 'Accent_r', 'Blues', 'Blues_r' 등등 ).generate(text)