2019. 11. 11. 15:23ㆍnlp
같은 영화/드라마에 대한 넷플릭스와 네이버의 시놉시스를 크롤링해 이들의 문체 차이를 분석하려 한다. 이번엔 사용한 어휘의 단계를 비교해볼 것이다.
어휘 단계는 국립국어원이 제공한 '한국어 학습용 어휘 목록' 파일을 참조했다.
https://www.korean.go.kr/front/etcData/etcDataView.do?mn_id=46&etc_seq=71
단어와 품사, 어휘 단계를 정리한 파일이다. 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 |