[파이썬] 파이썬을 이용한 감성 분석 프로젝트

이번 프로젝트에서는 파이썬을 이용하여 감성 분석을 수행하는 방법에 대해 알아보겠습니다. 감성 분석은 텍스트와 같은 비정형 데이터로부터 감정이나 의견을 추출하는 자연어 처리 기술입니다. 이를 통해 소셜 미디어 데이터, 제품 리뷰, 고객 의견 등 다양한 텍스트 데이터에서 감성적인 정보를 도출할 수 있습니다.

필요한 라이브러리 설치

감성 분석을 위해 다양한 라이브러리가 있지만, 이번 프로젝트에서는 NLTK와 TextBlob 라이브러리를 사용하겠습니다. NLTK는 영어 자연어 처리를 위한 라이브러리이며, TextBlob는 NLTK를 기반으로 하여 좀 더 편리한 인터페이스를 제공하는 라이브러리입니다. 아래의 명령어를 통해 라이브러리를 설치합니다.

pip install nltk
pip install textblob

데이터 전처리

감성 분석을 수행하기 전에, 텍스트 데이터를 사전 처리해야 합니다. 이 단계에서는 토큰화, 불용어 제거, 형태소 분석 등의 작업을 수행합니다. 이를 위해 NLTK 라이브러리의 함수들을 사용할 수 있습니다. 아래는 예시 코드입니다.

import nltk

# NLTK의 불용어 리스트를 다운로드합니다.
nltk.download('stopwords')

# 텍스트 데이터 전처리 함수
def preprocess_text(text):
    # 텍스트를 소문자로 변환합니다.
    text = text.lower()
    
    # 토큰화를 수행합니다.
    tokens = nltk.word_tokenize(text)
    
    # 불용어를 제거합니다.
    stop_words = set(nltk.corpus.stopwords.words('english'))
    tokens = [word for word in tokens if word not in stop_words]
    
    # 형태소 분석을 수행합니다.
    lemmatizer = nltk.WordNetLemmatizer()
    tokens = [lemmatizer.lemmatize(word) for word in tokens]
    
    # 전처리된 텍스트를 반환합니다.
    return ' '.join(tokens)

감성 분석 수행

데이터 전처리가 완료되면, 이제 실제로 감성 분석을 수행할 수 있습니다. TextBlob 라이브러리는 텍스트 데이터에 대해 감정 점수와 주관적인 의견을 추출하는 기능을 제공합니다. 아래는 예시 코드입니다.

from textblob import TextBlob

# 감성 분석 함수
def analyze_sentiment(text):
    blob = TextBlob(text)
    
    # 감정 점수를 반환합니다.
    sentiment_score = blob.sentiment.polarity
    
    # 주관적인 의견을 반환합니다. ("긍정적" 또는 "부정적"으로 나타납니다.)
    sentiment_label = "긍정적" if sentiment_score > 0 else "부정적"
    
    return sentiment_score, sentiment_label

예시 실행

이제 위에서 작성한 함수들을 사용하여 예시를 실행해 보겠습니다. 아래는 예시 텍스트에 대해 감성 분석을 수행하는 코드입니다.

text = "I love this movie! It's amazing."

# 텍스트 전처리
preprocessed_text = preprocess_text(text)

# 감성 분석 수행
sentiment_score, sentiment_label = analyze_sentiment(preprocessed_text)

print("감정 점수:", sentiment_score)
print("감정 레이블:", sentiment_label)

위의 코드를 실행하면 다음과 같은 결과가 출력됩니다.

감정 점수: 0.625
감정 레이블: 긍정적

이러한 방식으로 텍스트 데이터에 대해 감성 분석을 수행할 수 있습니다. 추가적인 분석을 원한다면, 데이터셋을 수집하고 머신 러닝 알고리즘을 적용하여 정확도를 높일 수도 있습니다.