단어문서행렬과 형태소 분석

Python을 통한 단어문서행렬과 형태소 분석


수강중

11. 한국어 단어 문서 행렬

한국어 데이터로 단어문서행렬(TDM)을 만들어보자.

데이터 다운로드

Naver Sentiment Movie Corpus (네이버 영화평) 데이터를 다운로드한다.

import requests

res = requests.get('https://github.com/e9t/nsmc/raw/master/ratings_train.txt')

with open('nsmc_train.csv', 'wb') as f:
    f.write(res.content)

데이터 불러오기

다운받은 데이터를 불러들인다.

import pandas as pd
nsmc = pd.read_csv('nsmc_train.csv', sep='\t')

.head() 명령어로 데이터의 앞부분에 위치한 5개 영화평을 살펴본다.

nsmc.head()
id document label
0 9976970 아 더빙.. 진짜 짜증나네요 목소리 0
1 3819312 흠...포스터보고 초딩영화줄....오버연기조차 가볍지 않구나 1
2 10265843 너무재밓었다그래서보는것을추천한다 0
3 9045019 교도소 이야기구먼 ..솔직히 재미는 없다..평점 조정 0
4 6483659 사이몬페그의 익살스런 연기가 돋보였던 영화!스파이더맨에서 늙어보이기만 했던 커스틴 ... 1

한 사례에 앞서 만든 명사 추출 함수를 적용해본다.

list(extract_noun('아 더빙.. 진짜 짜증나네요 목소리'))
['더빙', '짜증', '목소리']

문서 단어 행렬 만들기

from sklearn.feature_extraction.text import CountVectorizer

tokenizer에 명사 추출 함수를 지정한다. 다른 토큰화 함수를 지정해도 된다. stop_words에는 분석에서 제외할 단어 리스트를 넘겨준다.

cv = CountVectorizer(max_features=1000, tokenizer=extract_noun, stop_words=['거', '것'])

nsmc의 15만개의 문서 중에 1만개만으로 문서 단어 행렬을 만든다.

dtm = cv.fit_transform(nsmc.document[:10000])

문서 1만개, 단어 1천개가 포함된 문서 단어 행렬이 만들어졌다.

dtm.shape
(10000, 1000)

단어별 빈도를 표로 정리한다.

word_count = pd.DataFrame({
    '단어': cv.get_feature_names(), 
    '빈도': dtm.sum(axis=0).flat
})

빈도순으로 정렬하여 확인한다.

word_count.sort_values('빈도', ascending=False).head()
단어 빈도
600 영화 3871
748 608
130 575
453 508
583 연기 508

빈도표를 저장한다.

word_count.to_excel('nsmc-count.xlsx')