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 |