텍스트 처리용 IMDB 영화 리뷰 데이터 준비

영화 리뷰 데이터셋 구하기

영화 리뷰 데이터셋을 더 간편한 형태로 전처리

# <http://ai.stanford.edu/~amaas/data/sentiment/> 에서 내려받은 파일
import tarfile
with tarfile.open('aclImdb_v1.tar.gz', 'r:gz') as tar: 

    tar.extractall()

import pyprind
import pandas as pd
import os
import numpy as np

# aclImdb_v1.tar.gz 파일이 있는 path
basepath = 'aclImdb'
labels = {'pos':1, 'neg':0}
pbar = pyprind.ProgBar(50000)
df = pd.DataFrame()

for s in ('test', 'train'):
   for l in ('pos', 'neg'):
        path = os.path.join(basepath, s, l)

       for file in sorted(os.listdir(path)):
           with open(os.path.join(path, file), 'r', encoding='utf-8') as infile:
                txt = infile.read()

           df = df.append([[txt, labels[l]]], ignore_index=True)
            pbar.update()

df.columns = ['review', 'sentiment']

np.random.seed(0)
df = df.reindex(np.random.permutation(df.index))
df.to_csv('movie_data.csv', index=False, encodeing='utf-8')

BoW 모델 소개

단어를 특성 벡터로 변환

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer

count = CountVectorizer()

docs = np.array(['The sun is shining', 'The weather is sweet', 'The sun is shining, the weather is sweet, and one and one is two'])

bag = count.fit_transform(docs)

print(count.vocabulary_)
# [결과]
# {'the': 6, 'sun': 4, 'is': 1, 'shining': 3, 'weather': 8, 'sweet': 5, 'and': 0, 'one': 2, 'two': 7}

print(bag.toarray())
# [결과]
# [[0 1 0 1 1 0 1 0 0]
# [0 1 0 0 0 1 1 0 1]
# [2 3 2 1 1 1 2 1 1]]

tf-idf를 사용하여 단어 적합성 평가