[파이썬] 텍스트 감정 분석 및 감정 극성 분류

텍스트 감정 분석은 자연어 처리 분야에서 매우 중요한 주제 중 하나입니다. 이를 통해 우리는 주어진 텍스트에 대한 감정을 파악하고, 감정의 극성(긍정/부정)을 분류할 수 있습니다. 이러한 분석은 다양한 분야에 적용될 수 있으며, 예를 들어 소셜 미디어에서의 사용자 감성 분석, 제품 리뷰의 감정 평가, 뉴스 기사의 감정 분류 등에 활용될 수 있습니다.

이번 블로그 포스트에서는 파이썬을 사용하여 텍스트 감정 분석 및 감정 극성 분류를 수행하는 방법을 알아보겠습니다. 파이썬에는 이러한 분석을 위한 다양한 라이브러리와 도구가 있으며, 그 중에서도 자연어 처리를 위한 NLTK(Natural Language Toolkit)와 감정 분석을 위한 TextBlob 라이브러리를 활용하겠습니다.

문장 토큰화

감정 분석을 위해 텍스트를 문장 단위로 토큰화하는 것이 첫 번째 단계입니다. NLTK의 sent_tokenize 함수를 사용하여 텍스트를 문장으로 분리합니다.

import nltk

def sentence_tokenize(text):
    sentences = nltk.sent_tokenize(text)
    return sentences

text = "I am feeling happy today. The weather is perfect."
sentences = sentence_tokenize(text)
print(sentences)

단어 토큰화 및 어간 추출

각 문장을 단어 단위로 토큰화하여 단어의 어간을 추출하는 과정을 거칩니다. 이는 NLTK의 word_tokenize 함수와 PorterStemmer를 사용하여 쉽게 수행할 수 있습니다.

from nltk import word_tokenize, PorterStemmer

stemmer = PorterStemmer()

def word_tokenize_and_stem(text):
    words = word_tokenize(text)
    stemmed_words = [stemmer.stem(word) for word in words]
    return stemmed_words

for sentence in sentences:
    words = word_tokenize_and_stem(sentence)
    print(words)

감정 분석

이제 문장 단위로 토큰화된 단어들을 사용하여 감정 분석을 수행할 수 있습니다. TextBlob 라이브러리를 사용하여 감정 분석을 진행하며, sentiment.polarity 속성을 통해 문장의 감정 극성을 알 수 있습니다.

from textblob import TextBlob

def sentiment_analysis(text):
    blob = TextBlob(text)
    polarity = blob.sentiment.polarity
    if polarity > 0:
        sentiment = "긍정적인 감정"
    elif polarity < 0:
        sentiment = "부정적인 감정"
    else:
        sentiment = "중립적인 감정"
    return sentiment

for sentence in sentences:
    sentiment = sentiment_analysis(sentence)
    print(f"{sentence}: {sentiment}")

위의 예제 코드를 실행하면, 주어진 텍스트에 대한 문장 토큰화, 단어 토큰화 및 어간 추출, 그리고 감정 분석이 수행됩니다. 결과는 각 문장에 대한감정 극성을 나타내는 메시지와 함께 출력됩니다.

이처럼 파이썬을 사용하여 텍스트 감정 분석과 감정 극성 분류를 수행할 수 있습니다. 이러한 분석은 다양한 영역에서 유용하게 활용될 수 있으며, 데이터 분석, 소셜 미디어 감성 분석, 사용자 피드백 분석 등에 적용되어 활용할 수 있습니다.