파이썬 Sentiment analysis를 활용한 트위터 감정 분류

트위터는 사람들이 일상 생활에서 생각과 감정을 공유하는 매우 인기있는 소셜 미디어 플랫폼입니다. 이러한 감정 표현들을 분석하고 이해하는 것은 중요한 과제입니다. 텍스트 마이닝 기술과 Sentiment Analysis를 사용하여 트위터 데이터에서 감정을 분류하는 방법에 대해 알아보겠습니다.

Sentiment Analysis란?

Sentiment Analysis 또는 감정 분석은 텍스트 내에서 어떤 주관적인 감정을 표현하는지 분석하는 자연어 처리(NLP) 분야의 기술입니다. Sentiment Analysis는 문장, 문단 또는 문서와 같은 텍스트 데이터에서 긍정, 부정 또는 중립적인 감정을 식별하는 데 사용됩니다.

트위터 데이터 수집하기

트위터에서 트윗을 수집하기 위해서는 Twitter API에 액세스해야 합니다. tweepy와 같은 라이브러리를 사용하여 트위터 API를 사용할 수 있습니다. 개발자 계정을 만들고 API 키를 받은 후, 해당 키를 사용하여 트윗을 검색할 수 있습니다.

import tweepy

consumer_key = "your_consumer_key"
consumer_secret = "your_consumer_secret"
access_token = "your_access_token"
access_token_secret = "your_access_token_secret"

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

search_query = "#Python"
tweets = api.search(q=search_query, count=100)

텍스트 전처리

수집한 트위터 데이터를 Sentiment Analysis에 적용하기 전에 전처리해야 합니다. 이 단계에서는 특수 문자, 이모티콘, URL 등을 제거하고 각 단어를 소문자로 변환하는 등의 작업을 수행합니다. 텍스트 전처리를 위해 정규식(regular expression)을 사용할 수 있습니다.

import re

def preprocess_text(text):
    # 특수 문자 제거
    text = re.sub(r"[^\w\s]", "", text)
    # URL 제거
    text = re.sub(r"http\S+", "", text)
    # 이모티콘 제거
    text = re.sub(r"[^\w\s\U0001F600-\U0001F64F\U0001F300-\U0001F5FF\U0001F680-\U0001F6FF\U0001F1E0-\U0001F1FF]+", "", text)
    # 소문자 변환
    text = text.lower()
    return text

clean_tweets = [preprocess_text(tweet.text) for tweet in tweets]

Sentiment Analysis 모델 생성

텍스트를 전처리한 후, Sentiment Analysis 모델을 생성해야 합니다. 이를 위해서는 레이블이 지정된 학습 데이터가 필요합니다. 보통 긍정, 부정 또는 중립으로 레이블링된 데이터셋을 사용합니다. 이를 바탕으로 분류 모델을 학습시킬 수 있습니다. 여러 알고리즘을 사용할 수 있지만, 예를 들어 Naive Bayes 분류기나 딥러닝을 사용할 수 있습니다.

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(clean_tweets)

# 감성 분류기 모델 생성
clf = MultinomialNB()
clf.fit(X, labels)

트위터 감정 분류

모델을 학습시킨 후, 실제로 감정을 분류해보겠습니다. 입력된 트윗을 전처리하고, 벡터화한 후 모델에 입력하여 감정을 분류합니다.

def predict_sentiment(tweet):
    cleaned_tweet = preprocess_text(tweet)
    vectorized_tweet = vectorizer.transform([cleaned_tweet])
    sentiment = clf.predict(vectorized_tweet)
    return sentiment[0]

sample_tweet = "오늘 정말 기분이 좋아요!"
sentiment = predict_sentiment(sample_tweet)
print(sentiment)  # "positive" 출력

sample_tweet = "이 영화는 정말 별로에요..."
sentiment = predict_sentiment(sample_tweet)
print(sentiment)  # "negative" 출력

결론

파이썬과 Sentiment Analysis를 사용하여 트위터 감정을 분류하는 방법에 대해 알아보았습니다. 텍스트 전처리, 모델 학습 및 트위터 데이터 분류와 같은 단계를 거쳐 감정 분류를 수행할 수 있습니다. 이러한 분석을 통해 트위터 데이터에서 감정 트렌드를 파악하고 고객의 의견을 이해하는 데 도움이 될 수 있습니다.