텍스트 전처리 방법 (NLTK, spaCy 활용)
자연어 처리(NLP)에서 데이터 전처리는 필수적인 과정입니다. 텍스트 데이터는 일반적으로 불필요한 기호, 공백, 불용어(stopwords) 등이 포함되어 있으며, 이를 정리하지 않으면 모델의 성능이 저하될 수 있습니다. 이번 포스팅에서는 Python의 대표적인 NLP 라이브러리인 NLTK와 spaCy를 활용하여 텍스트 전처리 방법을 설명하겠습니다.
1. 텍스트 전처리란?
텍스트 전처리(Text Preprocessing)는 원시(raw) 텍스트 데이터를 정제하여 모델이 학습할 수 있도록 변환하는 과정입니다. 주요 전처리 작업에는 다음과 같은 단계가 포함됩니다.
- 토큰화(Tokenization): 문장을 단어나 문장 단위로 나누는 작업
- 불용어 제거(Removing Stopwords): 분석에 필요 없는 단어 제거
- 정규화(Normalization): 대소문자 변환, 숫자 변환 등
- 어간 추출(Stemming) 및 표제어 추출(Lemmatization): 단어의 기본형 변환
- 특수문자 및 숫자 제거: 의미 없는 문자 정리
이제, 각각의 단계별로 NLTK와 spaCy를 사용하여 구현해 보겠습니다.
2. NLTK를 활용한 텍스트 전처리
NLTK(Natural Language Toolkit)는 파이썬에서 가장 널리 사용되는 NLP 라이브러리 중 하나로, 다양한 전처리 기능을 제공합니다.
2.1 NLTK 설치 및 기본 설정
pip install nltk
Python 코드에서 NLTK를 활용하기 위해 필요한 패키지를 다운로드합니다.
import nltk
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('wordnet')
2.2 토큰화(Tokenization)
from nltk.tokenize import word_tokenize, sent_tokenize
text = "자연어 처리는 인공지능의 중요한 분야 중 하나입니다. 이를 통해 기계가 인간의 언어를 이해할 수 있습니다."
# 단어 단위 토큰화
word_tokens = word_tokenize(text)
print("단어 단위 토큰화:", word_tokens)
# 문장 단위 토큰화
sentence_tokens = sent_tokenize(text)
print("문장 단위 토큰화:", sentence_tokens)
2.3 불용어 제거(Removing Stopwords)
from nltk.corpus import stopwords
stop_words = set(stopwords.words('korean'))
filtered_words = [word for word in word_tokens if word not in stop_words]
print("불용어 제거 후:", filtered_words)
2.4 정규화(Normalization): 대소문자 변환
text = "Python은 인공지능과 데이터 분석에 널리 사용됩니다. PYTHON은 매우 강력한 언어입니다."
normalized_text = text.lower()
print("대소문자 변환:", normalized_text)
2.5 어간 추출(Stemming) 및 표제어 추출(Lemmatization)
from nltk.stem import PorterStemmer, WordNetLemmatizer
stemmer = PorterStemmer()
lemmatizer = WordNetLemmatizer()
word_list = ["running", "flies", "easily", "studies"]
stemmed_words = [stemmer.stem(word) for word in word_list]
lemmatized_words = [lemmatizer.lemmatize(word) for word in word_list]
print("어간 추출:", stemmed_words)
print("표제어 추출:", lemmatized_words)
3. spaCy를 활용한 텍스트 전처리
spaCy는 성능이 뛰어나고 사용하기 쉬운 NLP 라이브러리로, 토큰화, 품사 태깅, 개체명 인식 등의 기능을 제공합니다.
3.1 spaCy 설치 및 언어 모델 다운로드
pip install spacy
python -m spacy download ko_core_news_sm
3.2 토큰화(Tokenization)
import spacy
nlp = spacy.load("ko_core_news_sm")
text = "자연어 처리는 인공지능의 중요한 분야 중 하나입니다. 이를 통해 기계가 인간의 언어를 이해할 수 있습니다."
# 토큰화 수행
doc = nlp(text)
tokens = [token.text for token in doc]
print("spaCy 토큰화:", tokens)
3.3 불용어 제거(Removing Stopwords)
stopwords = nlp.Defaults.stop_words
filtered_words = [token.text for token in doc if token.text not in stopwords]
print("불용어 제거 후:", filtered_words)
3.4 정규화(Normalization): 대소문자 변환
normalized_text = text.lower()
print("대소문자 변환:", normalized_text)
3.5 표제어 추출(Lemmatization)
lemmatized_words = [token.lemma_ for token in doc]
print("표제어 추출:", lemmatized_words)
4. NLTK vs spaCy 비교
| 기능 | NLTK | spaCy |
|---|---|---|
| 토큰화 | word_tokenize() | nlp() 활용 |
| 불용어 제거 | stopwords.words() | nlp.Defaults.stop_words |
| 표제어 추출 | WordNetLemmatizer() | token.lemma_ |
| 어간 추출 | PorterStemmer() | 지원하지 않음 |
| 속도 | 상대적으로 느림 | 빠름 |
| 사용 편의성 | 다양한 기능 제공하지만 설정 필요 | 직관적이고 사용하기 쉬움 |
NLTK는 다양한 NLP 기능을 제공하지만 속도가 느리고 설정이 다소 번거로운 반면, spaCy는 성능이 뛰어나고 직관적인 API를 제공하여 실제 프로젝트에서 많이 사용됩니다.
5. 결론
텍스트 전처리는 NLP 모델의 성능을 결정하는 중요한 과정입니다. NLTK와 spaCy는 각각의 장점이 있으며, 작업에 맞게 선택하여 사용할 수 있습니다. 간단한 NLP 실험을 할 때는 NLTK가 유용할 수 있으며, 실제 프로젝트에서는 성능이 뛰어난 spaCy를 활용하는 것이 좋습니다. 앞으로 NLP 모델 학습을 위해 텍스트 데이터를 효과적으로 전처리하는 방법을 숙지하고 활용하는 것이 중요합니다.
'Python > Deep Learning' 카테고리의 다른 글
| NLP의 개념 및 주요 응용 분야 (0) | 2026.02.25 |
|---|---|
| CycleGAN을 활용한 이미지 변환 (0) | 2026.02.24 |
| 딥페이크(DeepFake)의 원리와 GAN을 활용한 이미지 합성 (0) | 2026.02.23 |
| DCGAN(Deep Convolutional GAN) 구현 (0) | 2026.02.22 |
| 기본적인 GAN 모델 구현 (PyTorch & TensorFlow) (0) | 2026.02.21 |