티스토리 뷰
2025.03.21 - [자연어처리] - [1] 토큰화(Tokenizer)
[1] 토큰화(Tokenizer)
NLP(Natural Language Processing)은 인간의 언어를 이해하고 해석하기 위한 목적으로 발전해 왔습니다. 다만 분석 모델의 학습 데이터셋은 수치형으로만 입력이 가능하기 때문에 텍스트 데이터 자체로
up-one-coding.tistory.com
토큰화 작업에 이어 Token을 정제하고 추출하는 방법에 대해 알아보겠습니다. Text 데이터에서 토큰을 추출해도 그 토큰에는 특수 문자, 오탈자 등이 포함되어 있을 수 있습니다. 그러한 문자들을 제거하고 Clean text로 만드는 작업이 '정제'입니다.
1. 정제
정제 작업은 데이터 사용 목적에 따라 노이즈를 제거하는 작업입니다. 대표적으로,
- 대 소문자 변환
- 출현 횟수가 적은 단어 제거
- 길이가 짧거나 지시대명사, 관사와 같은 단어 제거
등이 존재합니다. 정제 작업을 효율적으로 할 수 있는 방법은 정규표현식입니다. '정규표현식'은 're' 라이브러리를 통해 활용할 수 있고 특정 규칙에 맞는 문자를 추출할 수 있는 기능이 존재합니다.
import re
#한글 찾기
text = "Hello 안녕하세요"
korean = re.findall(r'[가-힣]+', text)
print(korean) #['안녕하세요']
#전화번호 추출하기
text = 'Call me at 010-1234-5678'
pattern = r'\d{3}[-\s]\d{4}[-\s]\d{4}'
number = re.findall(pattern, text)
print(number) #['010-1234-5678']
#특정 확장자 찾기
files = [
'image.jpeg', 'docuemtn,pdf', 'musd.mp3', 'phtot.jpg', 'arcfsdjk.gv', 'qwekj.py', 'cjfji.JPEG'
]
print(re.findall(r'\w+.jpeg|\w+.JPEG', str(files))) #['image.jpeg', 'cjfji.JPEG']
2. 추출
추출의 2가지 방법인 어간 추출과 표제어 추출은 다양한 형태의 텍스트 단어의 원래 유형을 찾아 문자의 복잡성을 줄여주는 역할을 합니다. 예를 들어, 과거형 / 현재형 / 미래형이 형태가 다른 영어의 경우 동사 원형의 형태를 알기 위해서 추출 방법을 사용하는 것입니다.
어간 추출과 표제어 추출의 차이는 품사 정보를 가지고 있는지의 여부입니다. 표제어 추출은 품사 정보를 가지고 있지만, 어간 추출은 가지고 있지 않습니다.
[어간 추출]
어간 추출은 문맥 정보를 고려하지 않고 문법적인 어근만 찾아서 추출하는 방법입니다. 어간 추출 방법은 일부 철자가 훼손된 어근을 그대로 추출하기 때문에 정확도가 높지는 않습니다. NLTK 패키지 내 어간 추출 방법에는 대표적으로 PorterStemmer와 LancasterStemmer가 존재합니다.
from nltk.stem import PorterStemmer, LancasterStemmer
port = PorterStemmer()
lanc = LancasterStemmer()
print(port.stem('Working'), port.stem('Works'), port.stem('Worked'))
#work work work
print(lanc.stem('Working'), lanc.stem('Works'), lanc.stem('Worked'))
#work work work
print(port.stem('happier'), port.stem('happiest'), port.stem('happily'))
#happier happiest happili
print(lanc.stem('happier'), lanc.stem('happiest'), lanc.stem('happily'))
#happy happiest happy
[표제어 추출]
표제어 추출은 단어들이 다른 형태를 가지더라도, 그 원형 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단합니다. NLTK 패키지에는 WordNetLemmatizer 함수를 사용합니다. WordNetLemmatizer은 단어의 품사를 옵션으로 설정할 수 있습니다.
from nltk.stem import WordNetLemmatizer #nltk의 표제어추출 라이브러리
lemma = WordNetLemmatizer() #단어의 품사(명사, 대명사, 동사 등)를 옵션으로 줄 수 있다
print(lemma.lemmatize('amusing', 'v'), lemma.lemmatize('amused','v'), lemma.lemmatize('amuses','v'))
print(lemma.lemmatize('was', 'v'), lemma.lemmatize('love', 'v'))
#amuse amuse amuse
#be love
[Class을 이용한 어간 추출]
import nltk
nltk.download('punkt')
nltk.download('wordnet')
nltk.download('punkt_tab')
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer, LancasterStemmer
class PreProcessing:
def __init__(self, text):
self.text = text
self.tokens = word_tokenize(text)
self.porter = PorterStemmer()
self.lanc = LancasterStemmer()
def porter_result(self):
return [self.porter.stem(token) for token in self.tokens]
def lanc_result(self):
return [self.lanc.stem(token) for token in self.tokens]
text = "Working hard was happier than singing"
example1 = PreProcessing(text)
print('The result of PorterStemmer : ',example1.porter_result())
print('The result of LancStemmer : ', example1.lanc_result())
#The result of PorterStemmer : ['work', 'hard', 'wa', 'happier', 'than', 'sing']
#The result of LancStemmer : ['work', 'hard', 'was', 'happy', 'than', 'sing']
'자연어처리' 카테고리의 다른 글
[4] TF - IDF을 이용한 특징 추출 (0) | 2025.03.29 |
---|---|
[3] 정수 인코딩 (0) | 2025.03.28 |
[1] 토큰화(Tokenizer) (0) | 2025.03.21 |
- 파이썬 #코딩테스트 #프로그래머스 #스택 #큐
- #자연어 처리 #정수 인코딩 #빈도 수 기반
- #물고기 종류별 대어 찾기 #즐겨찾기가 가장 많은 식당 정보 출력하기 #mysql #programmers
- randomforest #bagging #머신러닝 #하이퍼파라미터 튜닝
- 머신러닝 #project #classification #dacon
- 잘라서 배열로 저장하기 #2차원으로 만들기
- nlp #토큰화 #nltk #konply
- #opencv #이미지 읽기 #이미지 제작 #관심영역 지정 #스레시홀딩
- pca #주성분분석 #특이값분해 #고유값분해 #공분산행렬 #차원의 저주
- # 프로그래머스 #연속된 부분수열의 합 #이중 포인터 #누적합
- 파이썬 #시각화 #matplotlib
- #opencv #이미지 연산 #합성
- seaborn #데이터시각화 #타이타닉
- #tf idf
- python #프로그래머스 #겹치는선분의길이
- python #프로그래머스 #리스트 #인덱싱
- subquery #sql 코딩테스트
- 머신러닝 #xgboost #
- 로지스틱 회귀 #오즈비 #최대우도추정법 #머신러닝
- 자연어 처리 #정제 #정규표현식 #어간 추출 #표제어 추출
- 딥러닝 #오차역전파 #연쇄법칙 #계산그래프 #최적화
- 프로젝트 #머신러닝 #regression #eda #preprocessing #modeling
- python #deque #프로그래머스 #공 던지기 #문자열 계산하기 #코딩테스트
- #attention #deeplearning
- gan #생성자 #판별자 #적대적 신경 신경망 #딥러닝 #computer vision
- html #javascript #구구단 출력
- #프로그래머스 #안전지대 #시뮬레이션
- #seq2seq #encoder #decoder #teacher forcing
- #python #프로그래머스 #외계어사전 #itertools #순열과조합
- 머신러닝 #lightgbm #goss #ebf