예제1) 아래 데이터셋(네이버 영화평점)에서 댓글만 분리하기

조건

- 데이터셋 : data_set\\ratings.txt 

ratings.txt
18.61MB

 

결과)

['어릴때보고 지금다시봐도 재밌어요ㅋㅋ', '디자인을 배우는 학생으로, 외국디자이너와 그들이 일군 전통을 통해 발전해가는 문화산업이 부러웠는데. 사실 우리나라에서도 그 어려운시절에 끝까지 열정을 지킨 노라노 같은 전통이있어 저와 같은 사람들이 꿈을 꾸고 이뤄나갈 수 있다는 것에 감사합니다.', '폴리스스토리 시리즈는 1부터 뉴까지 버릴께 하나도 없음.. 최고.', '와.. 연기가 진짜 개쩔구나.. 지루할거라고 생각했는데 몰입해서 봤다.. 그래 이런게 진짜 영화지', '안개 자욱한 밤하늘에 떠 있는 초승달 같은 영화.']

코드)

f = open('data_set\\ratings.txt','r', encoding='utf-8') #r:read, encoding시 utf-8이 안되면 euc-kr, cp949 등을 사용

raw = f.readlines() #하나하나의 라인을 리스트의 요소로함.

# print(raw[:3])

reviews = []

for r in raw:
    reviews.append(r.split('\t')[1])

len(reviews)  #20001
reviews = reviews[1:]  #맨 앞 불용어 제거 (document)

print(reviews[:5])

 

 

예제2) 상기 reviews 데이터에서 불용어 사전을 만들어 적용하고 명사형 형태소 분석하기

 - 사용 패키지 : tqdm, kiwipie

 - reviews 데이터는 1000개만 쓰고, 결과값은 100개만 출력하기

 - 불용어 사전 : 영화 전 난 일 걸 뭐 줄 만 건 분 개 꿀 잼 이거 변 중 듯 때 게 내 말 나 수 거 점 것 뿐 년 

결과)

더보기

['디자인', '학생', '외국', '디자이너', '그', '전통', '발전', '문화', '산업', '우리', '나라', '시절', '끝', '열정', '노라노', '전통', '저', '사람', '꿈', '감사', '폴리스 스토리', '시리즈', '뉴', '하나', '최고', '연기', '개쩔', '생각', '몰입', '진짜', '안개', '밤하늘', '초승달', '사랑', '사람', '처음', '끝', '감동', '감동', '전쟁', '빠로', '굿', '바보', '병', '쉰', '나이', '감동', '훗날', '대사', '감정', '완벽', '이해', '고질라', '능', '오페라', '작품', '극단', '평', '도', '반전', '평점', '긴장감', '스릴', '최고', '전장', '공포', '네고시에이터', '소재', '관련', '최고', '밀회', '생각', '상당', '수작', '일본', '최고', '마음', '임팩트', '일품', '오랜만', '범죄', '스릴러', '사랑', '마디', '밤', '잠', '커징텅', '교복', '션자이', '볼펜', '자국', '마음', '형태', '마지막', '씬', '강압', '용서', '세뇌', '적용', '서']

 

코드)

stop_words = '영화 전 난 일 걸 뭐 줄 만 건 분 개 꿀 잼 이거 변 중 듯 때 게 내 말 나 수 거 점 것 뿐 년'
stop_words = stop_words.split()

from kiwipiepy import Kiwi
from tqdm import tqdm

kiwi = Kiwi()

review_tokens = []

for r in tqdm(reviews[:1000]):
    for t in kiwi.tokenize(r):
        if (t.tag[0] == 'N') & (t.form not in stop_words):
            review_tokens.append(t.form)

print(review_tokens[:100])

 

 

예제3) 상기 2) 결과의 주요 형태소의 상위 10개를 조사하여 데이터 프레임으로 만들고, 빈도수가 낮은 순서대로 정렬하기 

조건)

- 사용 함수 : collections 패키지의 Counter  함수

결과)

 

코드)

from collections import Counter
import pandas as pd

c = Counter(review_tokens)  # 딕셔너리 형태로 반환

# c['연기']  # 65

top_c = c.most_common(10) # 딕셔너리가 다시 리스트로 변환

df = pd.DataFrame(top_c, columns=['형태소','빈도수'])
df = df.sort_values(by='빈도수', ascending = True)
df

 

 

예제4) 빈도수를 그래프로 그려보기

- 사용패키지 : matplotlib

- 사용모듈 : matplotlib.pyplot 

- 사용함수 : matplotlib 의 font_manger

결과)

상위 10개의 키워드 추출결과

코드)

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import font_manager as fm

plt.style.use('default')
plt.rc('font',family='Gulim',size=10)

top_c= dict(top_c) #리스트를 다시 딕셔너리로 변환

plt.figure(figsize=(5,3))
plt.bar(top_c.keys(), top_c.values(), color='green', width=0.5)
plt.title('빈도수')

plt.show()

 

 

5) Word Cloud 만들기

- 사용 패키지 : WordCloud

결과)

코드)

from wordcloud import WordCloud
wc = WordCloud(font_path = 'gulim',  width=800, height=400, scale=2.0, max_font_size=250, max_words=200, background_color='white')
gen = wc.generate_from_frequencies(c) # c값(dictionary format을 이용하여 호출

plt.figure(figsize = (7, 5)) 
plt.axis('off') 
plt.imshow(gen); #gen을 호출

 

+ Recent posts