- 수업 내용 리마인드 및 아카이빙 목적의 업로드
자연어 처리에 관심이 있다면, 텍스트 데이터를 잘 다루는 것이 정말 중요해요. 그래서 오늘은 텍스트를 자연어 처리에 맞게 준비하는 텍스트 전처리에 대해 이야기해볼까 해요. 전처리 과정을 통해 중요한 정보는 그대로 두면서 불필요한 부분을 깔끔하게 정리하면, 훨씬 더 효과적인 분석이 가능해집니다.
1. 토큰화 (Tokenizing)
먼저 토큰화에 대해 알아볼게요. 토큰화는 텍스트를 잘게 쪼개는 작업인데요, 주로 단어별로 나누는 "단어 토큰화(Word Tokenization)"와 문장별로 나누는 "문장 토큰화(Sentence Tokenization)"가 있어요. 앞으로의 실습에서는 단어 토큰화를 주로 사용하게 될 거예요.
2. 품사 부착(PoS Tagging)
토큰화가 끝났다면, 이제 각 단어에 품사를 붙여주는 품사 부착을 할 차례예요. 이 과정에서 불필요한 단어를 걸러내거나 필요한 부분만 골라내어 분석에 사용하게 됩니다. 예를 들어, 조사나 접속사 같은 단어는 분석에 큰 도움이 되지 않으니 제거할 수 있어요.
3. 개체명 인식 (NER, Named Entity Recognition)
개체명 인식은 조금 더 재미있는 작업이에요. 예를 들어 "Apple"이라는 단어가 과일을 의미하는지, 아니면 회사를 뜻하는지를 구분해주는 작업이죠. 이를 통해 텍스트의 맥락을 더 잘 이해할 수 있게 돼요.
4. 원형 복원 (Stemming & Lemmatization)
이제 원형 복원을 통해 단어의 원래 형태를 찾아줄 거예요. 이 과정에서는 불필요한 데이터 중복을 줄여서 분석을 더 효율적으로 만들 수 있어요. 여기에는 두 가지 방법이 있는데요, 어간 추출은 단어의 기본 형태를 찾는 방법이고, 표제어 추출은 품사 정보를 유지하면서 원형을 찾는 방법이에요.
5. 불용어 처리 (Stopword Removal)
마지막으로, 불용어 처리를 통해 분석에 필요하지 않은 단어들을 제거해볼 거예요. 이렇게 하면 분석이 더 간결해지고, 불필요한 잡음을 줄일 수 있어요.
* 영문 전처리 실습
이제 실제로 영문 텍스트를 전처리해볼게요. 여기서는 NLTK라는 파이썬 라이브러리를 사용할 거예요. NLTK는 자연어 처리를 쉽게 할 수 있게 도와주는 도구랍니다.
1) 단어 토큰화 (Word Tokenization)
먼저 텍스트를 단어 단위로 나눠볼게요. 구두점이나 특수문자를 기준으로 단어를 분리해줍니다.
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt')
text = "Hello! I can't wait to try the word_tokenize, WordPunctTokenizer, and TreebankWordTokenizer."
word_tokens = word_tokenize(text)
print(word_tokens)
2) 품사 부착 (PoS Tagging)
이제 분리된 단어에 품사를 붙여줄 거예요. 이렇게 하면 각 단어가 문장에서 어떤 역할을 하는지 더 잘 알 수 있죠.
from nltk import pos_tag
nltk.download('averaged_perceptron_tagger')
taggedToken = pos_tag(word_tokens)
print(taggedToken)
3) 개체명 인식 (NER)
여기서는 텍스트에서 특정 개체를 찾아내는 작업을 해볼 거예요. 이를 통해 텍스트의 맥락을 더 명확하게 파악할 수 있답니다.
from nltk import ne_chunk
nltk.download('words')
nltk.download('maxent_ne_chunker')
neToken = ne_chunk(taggedToken)
print(neToken)
4) 원형 복원
단어의 원형을 찾아 표준화하는 작업이에요. 이렇게 하면 불필요한 중복을 줄일 수 있어요.
from nltk.stem import PorterStemmer
ps = PorterStemmer()
print("running -> " + ps.stem("running"))
5) 불용어 처리
이제 불필요한 단어를 제거해봅시다. 이렇게 하면 텍스트 분석이 훨씬 더 효율적이 될 거예요.
stopwords = ['the', 'is', 'in', 'and', 'to', 'a', 'of']
tokens = text.lower().split()
filtered_tokens = [word for word in tokens if word not in stopwords]
print(filtered_tokens)
* 한글 전처리 실습
한글의 경우, 영문과는 조금 다르게 처리해야 해요. 여기서는 KoNLPy라는 파이썬 라이브러리를 사용해서 한글 텍스트를 전처리해볼 거예요.
1) 한글 토큰화 및 형태소 분석
KoNLPy는 한국어 처리를 위해 만들어진 라이브러리로, 여러 가지 형태소 분석기를 지원해요.
from konlpy.tag import Komoran
komoran= Komoran()
kor_text = "인간이 컴퓨터와 대화하고 있다는 것을 깨닫지 못하고 인간과 대화를 계속할 수 있다면 컴퓨터는 지능적인 것으로 간주될 수 있습니다."
Komoran_tokens = komoran.morphs(kor_text)
print(Komoran_tokens)
2) 한글 품사 부착
토큰화한 한글 텍스트에 품사 정보를 붙여볼게요. 이렇게 하면 각 단어가 문장에서 어떤 역할을 하는지 더 잘 이해할 수 있답니다.
komoranTag = []
for token in Komoran_tokens:
komoranTag.append(komoran.pos(token))
print(komoranTag)
3) 불용어 처리
마지막으로 불필요한 단어들을 제거해볼게요. 이렇게 하면 텍스트가 더 간결해지고 분석이 더 쉬워집니다.
stopwords = ['이', '있', '하', '것', '들', '그', '되', '수', '않', '없', '나', '우리', '가', '한', '같', '때', '년', '에', '와', '고', '로', '를', '으로', '에게', '및', '의', '를', '은', '는', '에', '도', '가', '을', '이다', '다']
filtered_tokens = [word for word in tokens if word not in stopwords]
print("불용어 제거 후 텍스트:", filtered_tokens)
'+ 개발' 카테고리의 다른 글
N-gram: 텍스트에서 문맥 파악하기 (5) | 2024.09.07 |
---|---|
단어 표현(Word Representation) (1) | 2024.09.06 |
텍스트 마이닝 : 개념부터 활용까지 (9) | 2024.09.04 |
자연어 처리(NLP) 기초 (2) | 2024.09.03 |
Streamlit으로 데이터 분석 및 시각화 (0) | 2024.09.02 |