자연어처리 NLP의 2일차 프로젝트를 진행했습니다.
어제는 주로 주어진 데이터에 대해 분석을 진행했다면 오늘은 데이터 전처리를 중심으로 이루어졌습니다.
특수문자를 제거하기 위해 아래와 같은 코드를 작성했습니다.
data['text'] = data['text'].str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣A-Za-z0-9]', ' ', regex=True)
해당 코드를 사용해서 특수문자 대신에 띄어쓰기로 대체해 주었습니다.
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Tokenizer 객체 생성
tokenizer = Tokenizer()
# 주어진 텍스트 데이터에 대해 단어 사전 생성
tokenizer.fit_on_texts(data['text'])
# 문장 길이 분포 살펴보기
import matplotlib.pyplot as plt
import numpy as np
text_lengths = [len(text.split()[0]) for text in data['text']]
print(f"평균 문장 길이: {np.mean(text_lengths)}")
print(f"가장 짧은 문장 길이: {np.min(text_lengths)}")
print(f"가장 긴 문장 길이: {np.max(text_lengths)}")
plt.hist(text_lengths, bins=50)
plt.show()
# 문장 길이 결정
max_length = 40
# 주어진 텍스트 데이터를 정수 시퀀스로 변환
train_seq = tokenizer.texts_to_sequences(train_data['text'])
val_seq = tokenizer.texts_to_sequences(val_data['text'])
# Padding
train_seq = pad_sequences(train_seq, maxlen=max_length, padding='post')
val_seq = pad_sequences(val_seq, maxlen=max_length, padding='post')
토큰화와 동시에 seq작업을 진행해주었습니다.
어제 한글화 문제에 대해 코드를 달았는데 추가적으로 코랩에서 한글문제를 해결할 수 있는 코드를 작성하겠습니다.
!sudo apt-get install -y fonts-nanum
먼저 나눔 글꼴을 받아줍니다.
FONT_PATH = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'
font_name = fm.FontProperties(fname=FONT_PATH, size=10).get_name()
print(font_name)
plt.rcParams['font.family']=font_name
assert plt.rcParams['font.family'] == [font_name], "한글 폰트가 설정되지 않았습니다."
다음으로 글꼴이 잘 설치되었다면 NanumGothic이 출력될 것 입니다.
아직 전처리가 익숙하지 않아 여기까지 밖에 진행하지 못했습니다. 내일 최대한 전처리를 마무리 짓고 모델링까지 진행하겠습니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.