엘라스틱서치와 파이썬을 활용한 실시간 Sentiment analysis 시스템 구축

소개

Sentiment Analysis는 텍스트 데이터에서 감정을 분석하는 기술입니다. 이 문서에서는 Elasticsearch와 Python을 사용하여 실시간 Sentiment Analysis 시스템을 구축하는 방법을 알아보겠습니다.

필요한 도구

시스템 아키텍처

architecture

위 그림은 시스템의 아키텍처를 보여줍니다. 데이터는 Elasticsearch에 색인됩니다. Python 애플리케이션은 Elasticsearch에서 데이터를 가져와 Sentiment Analysis를 수행하고, 결과를 다시 Elasticsearch에 색인합니다. Kibana를 통해 데이터를 시각화하고 대시보드를 생성할 수 있습니다.

Elasticsearch 인덱스 생성

먼저, Elasticsearch에 데이터를 저장할 인덱스를 생성해야 합니다. 다음은 새로운 인덱스를 생성하는 코드입니다:

from elasticsearch import Elasticsearch
from elasticsearch.helpers import recreate_index

# Elasticsearch 클라이언트 생성
es = Elasticsearch()

# 새로운 인덱스 생성
index_name = "sentiment-analysis"
recreate_index(es, index=index_name)

데이터 수집

Sentiment Analysis를 위해 데이터를 수집해야 합니다. 예를 들어, Twitter API를 사용하여 트윗을 수집할 수 있습니다. 수집한 데이터를 Elasticsearch에 색인하는 코드는 다음과 같습니다:

from elasticsearch.helpers import streaming_bulk

def index_data(es, index_name, data):
    for success, info in streaming_bulk(es, data, index=index_name):
        if not success:
            print(f"Error indexing document: {info}")

# 수집한 데이터
data = [
    {"text": "I love this product", "sentiment": "positive"},
    {"text": "This is a great movie", "sentiment": "positive"},
    {"text": "I hate this service", "sentiment": "negative"},
]

# 데이터 색인
index_data(es, index_name, data)

Sentiment Analysis

Sentiment Analysis를 위해 Python의 자연어 처리 라이브러리인 NLTK를 사용할 수 있습니다. 다음은 간단한 Sentiment Analysis를 수행하는 코드입니다:

import nltk
from nltk.sentiment import SentimentIntensityAnalyzer

# NLTK의 SentimentIntensityAnalyzer 초기화
sia = SentimentIntensityAnalyzer()

def perform_sentiment_analysis(text):
    sentiment = sia.polarity_scores(text)
    return sentiment["compound"]

# 문장의 감정 분석
text = "I really enjoyed the concert"
sentiment_score = perform_sentiment_analysis(text)

결과 색인

Sentiment Analysis 결과를 Elasticsearch에 색인합니다. 다음은 결과를 새로운 필드로 추가하는 코드입니다:

def perform_sentiment_analysis_and_index(es, index_name):
    # Elasticsearch에서 문서 가져오기
    documents = es.search(index=index_name, body={"query": {"match_all": {}}})

    # 문서 별로 Sentiment Analysis 수행 및 결과 색인
    for doc in documents["hits"]["hits"]:
        sentiment_score = perform_sentiment_analysis(doc["_source"]["text"])

        # 결과를 색인할 문서 생성
        updated_doc = {
            "doc": {
                "sentiment_score": sentiment_score
            },
            "doc_as_upsert": True
        }

        # 결과를 Elasticsearch에 업데이트
        es.update(index=index_name, id=doc["_id"], body=updated_doc)

데이터 시각화

Kibana를 사용하여 Elasticsearch에서 데이터를 시각화할 수 있습니다. Kibana 대시보드를 생성하고 원하는 시각화를 추가하는 방법은 Elasticsearch 공식 문서를 참조하십시오.

마무리

위에서 설명한 방법을 사용하여 Elasticsearch와 Python을 활용한 실시간 Sentiment Analysis 시스템을 구축할 수 있습니다. 데이터를 수집하고 분석하여 감정을 분석하고, 결과를 시각화하는 것은 Sentiment Analysis 시스템의 중요한 부분입니다. 이 시스템을 활용하여 감정 분석에 대한 통찰력을 얻을 수 있습니다.

#elasticsearch #python