넷플릭스/네이버 시놉시스 어휘 단계 분석하기

2019. 11. 11. 15:23nlp

반응형

같은 영화/드라마에 대한 넷플릭스와 네이버의 시놉시스를 크롤링해 이들의 문체 차이를 분석하려 한다. 이번엔 사용한 어휘의 단계를 비교해볼 것이다.

 

 

어휘 단계는 국립국어원이 제공한 '한국어 학습용 어휘 목록' 파일을 참조했다.

https://www.korean.go.kr/front/etcData/etcDataView.do?mn_id=46&etc_seq=71

 

국립국어원

축소 확대 기타 자료 상세보기 한국어 학습용 어휘 목록(엑셀 파일) 담당부서 한국어진흥과 등록일 2003. 6. 4. 조회수 52218 한국어 학습용 어휘 목록 국립국어연구원에서 2003년 5월에 발표한 한국어 학습용 어휘 목록입니다. 1단계 982개, 2단계 2,111개, 3단계 2,872개, 총 5,965개 단어가 포함되어 있습니다. 전체 5,965개를 가나다순으로 배열하였으며 1단계는 A, 2단계는 B, 3단계는 C로 표시되어 있습니다. 이용자의 편

www.korean.go.kr

단어와 품사, 어휘 단계를 정리한 파일이다. A단계가 가장 쉬운 단어, B단계는 중간, C단계가 가장 어려운 단어이다.

 

 

주피터 노트북에서 열어보면 다음과 같다.

 

import pandas as pd
kor_xls = pd.read_excel('kor_words.xls', index_col=None)
kor_xls.to_csv('kor_words.csv', encoding='utf-8', index=False)
kor = pd.read_csv('kor_words.csv')
kor.head()

 

 

이 데이터를 분석하기 알맞게 변형해줘야 한다. 클리닝 클리닝... 

 

# 불필요한 칼럼 삭제
kor = kor.drop(columns=['풀이', '순위'])

# konlpy 품사 태그 기준으로 바꾸기 
kor = kor.replace(['감', '고', '관', '대', '동', '명', '보', '부', '불', '수', '의', '형'], ['IC', 'NNP', 'MM', 'NP', 'VV', 'NNG', 'VX', 'MAG', 'None', 'NR', 'NNB', 'VA'])

# A,B,C 단계를 1,2,3 단계로 바꾸기
kor = kor.replace(['A', 'B', 'C'], [1,2,3])

# 단어 뒤의 숫자 없애기
kor['단어'] = kor['단어'].str.replace('\d+', '')

 

이제 넷플릭스 시놉시스 POS 태깅을 해주고, 1단계 어휘가 얼마나 쓰였는지 확인해 본다. 

 

# 넷플릭스 시놉시스 불러오기 
with open('netflix.txt', 'r', encoding='UTF8') as f:
    lines = f.read().splitlines()

# POS 태깅하기 
from konlpy.tag import Komoran 
tagger = Komoran()
tagged_sentences = [tagger.pos(sent) for sent in sentences]

# POS 태깅하면 동사와 형용사는 '-다'가 없는 형태로 나온다. 그런데 어휘 단계 데이터에선 '-다'까지 포함된 형태이므로 '-다'를 추가해줘야 한다
netflix = []
for sent in tagged_sentences:    
    for word, tag in sent:
        if tag in ['VV', 'VA']:
            netflix.append(word)           
netflix = [v+'다' for v in netflix]

# 동사, 형용사 외 나머지 품사의 단어를 모두 netflix라는 list에 append 해준다
for sent in tagged_sentences:    
    for word, tag in sent:
        if tag in ['IC', 'NNP', 'MM', 'NP', 'NNG', 'VX', 'MAG', 'None', 'NR', 'NNB']:
            netflix.append(word)

 

어휘 단계가 1단계인 단어만 뽑는다. 

# 1단계 단어만 뽑은 data frame
easy = kor.query('등급==1')

# 1단계 단어들의 리스트
easy_words = easy['단어'].tolist()

 

이제 netflix라는 list에 있는 단어와 easy라는 data frame에 있는 단어를 비교한다. 많이 겹칠수록 넷플릭스는 1단계(쉬운) 단어를 많이 사용한 것이다. 

 

# easy_list : 넷플릭스에 사용된 1단계짜리 단어들의 리스트
# easy_count : 넷플릭스에 사용된 1단계짜리 단어들의 수 
easy_list=[]
easy_count =0
for word in naver:
    if word in easy_words:
        easy_list.append(word)
        easy_count+=1

 

가장 많이 사용된 1단계짜리 어휘들을 살펴보면

 

from collections import Counter
Counter(easy_list).most_common()

 

('되다', 1727), ('그', 1520), ('하다', 802), ('것', 798), ('이', 782), ('있다', 775), ('수', 675), ('없다', 551), ('한', 533), ('시작', 504), ('분', 480), ('사람', 377), ('주', 372), ('알다', 365), ...

 

전체 넷플릭스 어휘 중 1단계 어휘가 차지하는 비율을 보면 33.7% 정도 나온다.

 

# 넷플릭스 1단계 단어 비율 
easy_count / len(netflix)

0.3376716 ... 

 

 


같은  분석을 1,2,3 단계 모두 하고 네이버까지도 해주면 된다. 각 단계별 어휘 사용 비율은 다음과 같다.

 

넷플릭스
- 1단계 : 33.7%
- 2단계 : 22.5%
- 3단계 : 20.1%

네이버
- 1단계: 32.9%
- 2단계: 22.0%
- 3단계: 19.2%

 

소름 돋을 만큼 비슷하게 나왔다. 그래서 이 분석은 버리는 걸로..  :(

반응형

'nlp' 카테고리의 다른 글

Minimum Edit Distance  (0) 2019.12.04
정규표현식 정리  (0) 2019.12.04
넷플릭스/네이버 시놉시스 품사 분석하기  (3) 2019.11.04
네이버 영화/드라마 시놉시스 크롤링  (6) 2019.10.08
'맴찢'의 품사는 무엇일까?  (1) 2019.10.05