[NLP Project] 1-2. 데이터 전처리 - 특수문자 제거하기

2022. 11. 9. 21:41·Project/캡스톤디자인2
728x90
반응형

이전에 구현했던 코드에서 데이터 전처리를 조금 더 진행해보겠다.

data_load.py에서 구현했던 tag_split() 함수에서

해당 문자에서 한글, 영어, 소문자, 대문자 이외의 단어를 제거하는 함수를 작성해보겠다.

 

        cng_sentence = []
        for str in sentence:
            # 한글, 영어, 소문자, 대문자 이외의 단어 제거
             str = re.sub(r'[^ㄱ-ㅣ가-힣0-9a-zA-Z.]', "", str)
             cng_sentence.append(str)

 

# 전처리한 데이터를 바탕으로 단어와 태그 나누기
def tag_split(tagged_sentences):
    sentences, ner_tags = [],[]
    for tagged_sentence in tagged_sentences:
        sentence, tag_info = zip(*tagged_sentence)
        cng_sentence = []
        cng_sentence.append("[CLS]")
        tag_info = list(tag_info)
        tag_info.insert(0,'-')
        for str in sentence:
            # 한글, 영어, 소문자, 대문자 이외의 단어 제거
             str = re.sub(r'[^ㄱ-ㅣ가-힣0-9a-zA-Z.]', "", str)
             cng_sentence.append(str)
             list(tag_info)
             
        cng_sentence.append("[SEP]")
        tag_info.append('-')

        sentences.append(cng_sentence)
        ner_tags.append(tag_info)

    return sentences, ner_tags

 

특수문자 처리 전

 

[['비토리오', '양일', '만에', '영사관', '감호', '용퇴,', '항룡', '압력설', '의심만', '가율'], ['이', '음경동맥의', '직경이', '8', '19mm입니다', '.'], ['9세이브로', '구완', '30위인', 'LG', '박찬형은', '평균자책점이', '16.45로', '준수한', '편이지만', '22⅓이닝', '동안', '피홈런이', '31개나', '된다', '.'], ['7승', '25패는', '상트페테르부르크가', '역대', '월드리그에', '출진한', '분별', '최선의', '성적이다', '.'], ['▲', '퍼거슨', '씨족의', '꾀'], ['[유로2008]', "'공인구가", '변할', '기록', '시정조치는', '죽을', '맛', '?', "'"], ['로마올림픽에서', '육미지황탕', '이남지역으로', '동메달에', '머문', '추경대는', '차년', '파리오픈', '결승전에서', '진', '동영의', '탄셰', '차우세스쿠를', '비롯해', '몽골의', '이창동', '차간바,', '발보나의', '리자루드', '박혜미셔', '좌타자를', '놓고', '추축한다', '.'], ['금반', '명기', '통합우승', '24,', '10회차는', '8일', '상오', '6시', '50분,', '상오', '11시', '50분에', '발태가', '끝마감되며,', '비공식', '적중결과는', '5일', '공표된다', '.'], ['권뢰가', '있는', '곳에', '직경에', '따라', '달라지는데요', '.'], ['때로는은', '귀여운', '가스나기인', '비담,', '세상일에는', '무관심', '.']]

 

특수문자 처리 후 

 

[['비토리오', '양일', '만에', '영사관', '감호', '용퇴', '항룡', '압력설', '의심만', '가율'], ['이', '음경동맥의', '직경이', '8', '19mm입니다', '.'], ['9세이브로', '구완', '30위인', 'LG', '박찬형은', '평균자책점이', '16.45로', '준수한', '편이지만', '22이닝', '동안', '피홈런이', '31개나', '된다', '.'], ['7승', '25패는', '상트페테르부르크가', '역대', '월드리그에', '출진한', '분별', '최선의', '성적이다', '.'], ['', '퍼거슨', '씨족의', '꾀'], ['유로2008', '공인구가', '변할', '기록', '시정조치는', '죽을', '맛', '', ''], ['로마올림픽에서', '육미지황탕', '이남지역으로', '동메달에', '머문', '추경대는', '차년', '파리오픈', '결승전에서', '진', '동영의', '탄셰', '차우세스쿠를', '비롯해', '몽골의', '이창동', '차간바', '발보나의', '리자루드', '박혜미셔', '좌타자를', '놓고', '추축한다', '.'], ['금반', '명기', '통합우승', '24', '10회차는', '8일', '상오', '6시', '50분', '상오', '11시', '50분에', '발태가', '끝마감되며', '비공식', '적중결과는', '5일', '공표된다', '.'], ['권뢰가', '있는', '곳에', '직경에', '따라', '달라지는데요', '.'], ['때로는은', '귀여운', '가스나기인', '비담', '세상일에는', '무관심', '.']]

data_load.py

import os
import re
from transformers import BertTokenizer

# 파일 로드하고 텍스트파일 전처리하기
def file_load(file_path):
    tagged_sentences = []
    sentences = []
    with open(file_path,"r") as f:
        for line in f:
            if len(line) == 0 or line[0] == "\n":
                if len(sentences) > 0:
                    tagged_sentences.append(sentences)
                    sentences = []
            splits = line.rstrip('\n').split('\t')
            if len(splits) == 3:
                sentences.append([splits[1],splits[-1]])
    return tagged_sentences

# 전처리한 데이터를 바탕으로 단어와 태그 나누기
def tag_split(tagged_sentences):
    sentences, ner_tags = [],[]
    for tagged_sentence in tagged_sentences:
        sentence, tag_info = zip(*tagged_sentence)
        cng_sentence = []
        cng_sentence.append("[CLS]")
        tag_info = list(tag_info)
        tag_info.insert(0,'-')
        for str in sentence:
            # 한글, 영어, 소문자, 대문자 이외의 단어 제거
             str = re.sub(r'[^ㄱ-ㅣ가-힣0-9a-zA-Z.]', "", str)
             cng_sentence.append(str)
             list(tag_info)
             
        cng_sentence.append("[SEP]")
        tag_info.append('-')

        sentences.append(cng_sentence)
        ner_tags.append(tag_info)

    return sentences, ner_tags


if __name__ == "__main__":
    file_path = "data/train_data.txt"
    tagged_sentences = file_load(file_path)
    print(tagged_sentences[5000])
    sentences, ner_tags = tag_split(tagged_sentences)
    print(sentences[5000],ner_tags[5000])
# 원본 파일
[['Copyrights', '-'], ['ⓒ', '-'], ['히타치', 'ORG_B'], ['.', '-']]
# 후
['[CLS]', 'Copyrights', '', '히타치', '.', '[SEP]'] ['-', '-', '-', 'ORG_B', '-', '-']
728x90
반응형

'Project > 캡스톤디자인2' 카테고리의 다른 글

[NLP Project] Padding , Attention mask  (1) 2022.11.11
[NLP Project] BERT 인풋 만들기 - 1. 문장 전처리  (3) 2022.11.09
[NLP Project] F1 Score  (0) 2022.11.08
[NLP Project] LSTM + self-attention  (0) 2022.11.08
[NLP Project] input 값을 넣어 개체명 인식하기 - 오류 해결  (0) 2022.11.07
'Project/캡스톤디자인2' 카테고리의 다른 글
  • [NLP Project] Padding , Attention mask
  • [NLP Project] BERT 인풋 만들기 - 1. 문장 전처리
  • [NLP Project] F1 Score
  • [NLP Project] LSTM + self-attention
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소수
    programmers
    Python
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[NLP Project] 1-2. 데이터 전처리 - 특수문자 제거하기
상단으로

티스토리툴바