KT 에이블스쿨 45일차(1)

박기범·2023년 4월 4일
0

에이블스쿨

목록 보기
51/95

자연어처리 NLP의 2일차 프로젝트를 진행했습니다.



실습에 사용한 코드

어제는 주로 주어진 데이터에 대해 분석을 진행했다면 오늘은 데이터 전처리를 중심으로 이루어졌습니다.

▶특수문자 제거

특수문자를 제거하기 위해 아래와 같은 코드를 작성했습니다.

	data['text'] = data['text'].str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣A-Za-z0-9]', ' ', regex=True)

해당 코드를 사용해서 특수문자 대신에 띄어쓰기로 대체해 주었습니다.

▶Sequence

    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이 출력될 것 입니다.







아직 전처리가 익숙하지 않아 여기까지 밖에 진행하지 못했습니다. 내일 최대한 전처리를 마무리 짓고 모델링까지 진행하겠습니다.




※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.

profile
개발자가 되기 위한 한걸음

0개의 댓글