한국어 전처리 입문
자연어 처리
- Natural Language Processing
- 일상에서 사용하는 자연어를 컴퓨터로 하여금 분석, 처리할 수 있도록 다듬는 것
자연어 처리를 위한 Python 패키지
- NLTK (Natural Language ToolKit)
: 영문으로 이루어진 텍스트 데이터의 처리와 분석을 가능케 하는 Python 패키지 - KoNLPy (Python package for NLP of the Korean language)
: 형태소 분석 등 한국어 텍스트의 전처리에 특화된 Python 패키지
영문 전처리에 비해 월등히 어려운 국문 전처리
Problem 1 : 띄어쓰기로 문장을 명확하게 나누기 어려움
- 띄어쓰기를 통해 문장이 비교적 뚜렷하게 구분되는 영어
- 한국어의 경우, 띄어쓰기 규범이 올바르게 지켜지지 않은 텍스트를 분석해야 하는 경우가 대단히 많음
Problem 2 : 교착어에 해당하는 한국어, 더욱 어려운 문장 분석
- “시험 문제를 잘 맞혔겠더라” 분석
→ 시험/문제/를/잘/맞히/었/겠/더라 - 낱말의 형태가 다양하게 변화하는 한국어 특성상, 텍스트 분석이 더욱 어려움
한국어 전처리를 위한 konlpy 설치
!pip install konlpy
불필요한 특수문자 제거
text = '액션이 어떻게 되는지 아세요? 무한! 무~야~호'
filter = ['~','!','@','*','%','?']
for i in filter :
text = text.replace(i,'')
print(text)
특수문자 리스트를 생성 후, 해당 문자 제거
텍스트를 낱말 단위로 쪼개기 (단순 split)
text = '액션이 어떻게 되는지 아세요 무한 무야호'
text_token = text.split()
print(text_token)

Komoran : 보다 의미 있는 토큰화
from konlpy.tag import Komoran # konlpy 설치는 미리 필요
komoran = Komoran()
text = '액션이 어떻게 되는지 아세요 무한 무야호'
result = komoran.morphs(text)
print(result)

pos_result = komoran.pos(text)
print(pos_result)
Komoran 형태소 분석 결과에 품사 태깅

noun_only = komoran.nouns(text)
print(noun_only)
Komoran 형태소 분석 결과에서 명사만을 추출


Komoran의 품사 분류 체계
불용어 제거 : 일상 어휘를 분석에서 배제하기
stopwords = ['은','는','이','가','어떤','무','유','든지','는지','게']
stop_results = []
for word in result :
if (word in stopwords) == False :
stop_result.append(word)
print(stop_result)
stopword 리스트를 생성한 후, 해당 낱말 제거

TF-IDF와 문서 유사도
TF-IDF
- Term Frequency - Inverse Doucument Frequency
- (특정 문서의 해당 낱말 빈도)에 (해당 낱말이 등장한 문서 수)를 나눈 값
→ 여러 문서에 등장하면 희소성 낮음 - 낱말의 등장 횟수뿐 아니라, 낱말이 등장한 문서의 희소성까지 고려
문서별 낱말 등장 횟수 알아보기
articles = ['대선 후보 전략 분석', '경제 위기 신호 감지', '주식 시장 혼란 전략', '대선 여론 조사 역전 조사 결과 분석']
from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
print(vector.fit_transform(articles).toarray())
print(vector.vocabulary_)
- 전처리가 완료된 기사 제목 리스트 생성 후, CounterVector를 이용한 문서-낱말 행렬 생성

scikit-learn을 이용한 TF-IDF 연산 결과 도출
from sklearn.feature_extraction.text import TfidfVectorizer
tf_idf = TfidfVectorizor().fit(articles)
tf_idf_matrix = tf_idf.transform(articles).toarray()
print(tf_idf_matrix)
print(tf_idf.vocabulary_)

cosine similarity
- 평면 혹은 공간에 존재하는 두 벡터가 얼마나 비슷한지 확인하려면?
→ 문서 벡터 간의 코사인 값을 계산하여, 두 문서가 얼마나 유사한지 파악
→ 두 벡터가 비슷한 방향을 가리킬수록 / 각의 크기가 작을수록 / 코사인의 값이 1에 가까울수록
from sklearn.metrics.pairwise import cosine_similarity
similar_article = cosine_similarity(tf_idf_matrix, tf_idf_matrix)
print(similar_article)
1에 가까운 수가 나올수록 유사한 문서

감성 분석과 토픽 모델링
감성 분석을 위한 접근법
1. Predictive Model
- 분류 문제와 비슷하게 정서 분석을 접근
- 정서 분류 결과를 알고 있는 데이터를 학습
- 정서를 모르는 데이터에 대해 이를 적용
2. Dictionary Based Model
- 정서 분석을 위한 사전을 활용하는 접근
- 긍정어, 부정어 목록이 담긴 사전을 마련
- 각 데이터의 긍정어와 부정어 빈도를 분석
Topic Modeling
- 주어진 텍스트로부터 개별 낱말의 등장 빈도 등을 파악
- 공통된 주제라 할 수 있는 토픽을 도출하는 기법
'Python' 카테고리의 다른 글
| [Python] 군집화를 통한 데이터 특성 파악 (0) | 2025.10.02 |
|---|---|
| [Python] BeautifulSoup를 이용한 웹 크롤링 (0) | 2025.10.01 |
| [Python] 데이터 전처리 후 Matplotlib로 시각화 방법 (0) | 2025.09.30 |
| [Python] Pandas를 이용한 데이터 처리 방법 정리 (0) | 2025.09.30 |
| [Python] 재귀 호출과 그 응용 (0) | 2025.09.30 |