Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Deep Learning/[Books] 머신러닝, 딥러닝 실전 앱 개발

자연어처리(카테고리 분류) 데이터 전처리

Kellyyyy 2020. 5. 28. 08:38

 

지난 포스팅에서는 형태소 분석 방법과 문장을 수치로 변환하는 예제에 대해서 공부했다.

이번 포스팅은 "문서"를 입력 받아 수치로 변환하는 방법에 대해서 공부해보겠다.

 

문장을 수치로 변환하는 예제를 이해했다면, 문서를 변환하는 건 아주 간단하다.

문서를 문장으로 바꾼 뒤, 문장을 수치로 바꾸면 된다.

 

read() 함수를 통해 파일(문서)를 한 줄씩 읽은 후

add_text()에 인자로 전달한다.

 

 

def add_file(path) :
    with open(path, "r", encoding="utf-8") as f :
        s = f.read()
        add_text(s)

 

 

문서별 형태소 분석까지 마쳤다.

이후에는 calc_files()를 사용하여 수치로 변환한다.

 

add_text()와 calc_files()가 궁금하다면?

 

 


 

 

그럼 이제 지금까지 다뤘던 내용을 바탕으로

자연어를 수치로 변환하여 x, y 데이터를 생성해보겠다.

 

우선 문서 파일은 인터넷 신문기사 정치, 경제, 생활, IT/과학 카테고리를 크롤링 한 뒤,

각각 100, 101, 103, 105라는 폴더명으로 분류한다.

 

 

 

 

1. y (target) 

y가 가질 수 있는 값들은 아래와 같다.

 

 

LABELS = ['정치', '경제', '생활', 'IT/과학']

 

 

레이블 데이터는 인덱스를 활용하여 숫자로 표현할 수 있다.

 

정치 = 0 

경제 = 1

생활 = 2

IT/과학 = 3

 

2. X (문서)

 

폴더에서 파일을 하나씩 읽은 후, 

위에서 만든 add_file()의 인자로 전달한다.

 

이때 폴더에서 파일을 읽기 위해 glob()를 사용했다.

label을 y에 세팅하고, calc_files()를 통해 문서를 숫자로 변환했다.

 

 

import glob

x= []
y= []

def read_files(path, label) :
    print("read_files : ", path)
    files = glob.glob(path + "/*.txt")
    for f in files :
        add_file(f)
        y.append(label)
        
read_files('100',0)
read_files('101',1)
read_files('103',2)
read_files('105',3)

x = calc_files()

 

 

실행결과는 아래와 같다.

 

 

 


 

이제 x,y가 딥러닝 입,출력 데이터셋 형식에 맞는지 점검해보자.

지난 포스팅에서 딥러닝을 위해서는 입,출력 데이터가 정규화된 1차원 배열 형식이어야한다고 했었다.

 

딥러닝 데이터 전처리 방식이 궁금하다면?

 

 

x, y데이터를 확인해보면,

 

 

 

 

x는 이미 정규화된 1차원 배열 형식이다.

 

 

 

반면 y는 0,1,2,3등의 레이블 데이터이다.

to_categorical()를 통해 one-hot vector형식으로 변환했다. 

 

 

import keras
y = keras.utils.np_utils.to_categorical(y,4)
print(y)

 

 

 

 

추가적으로 숫자로 변환한 x, y 데이터와

word_dic, dt_dic, files 데이터는 파일로 저장해두었다.

 

 

import pickle

def save_dic(fname) :
    pickle.dump(
    [word_dic, dt_dic, files],
    open(fname, "wb"))

pickle.dump([y,x], open('genre.pickle', 'wb'))
save_dic('genre-tfidf.dic')
print('ok')

 

 

 

[참고 문헌]

책 - 파이썬을 활용한 머신러닝, 딥러닝 실전 앱 개발