[python] PyQt에서의 감정 분석 기능 구현

감정 분석은 컴퓨터가 텍스트나 음성과 같은 자연어 데이터를 분석하여 그 안에 담긴 감정을 식별하는 기술입니다. PyQt를 사용하여 GUI 기반의 감정 분석 프로그램을 구현해보겠습니다.

프로그램 개요

이 프로그램은 PyQt를 사용하여 텍스트 입력을 받아 감정 분석을 수행하고, 결과를 사용자에게 표시하는 간단한 프로그램입니다.

필요한 도구

프로그램 구조

  1. PyQt로 GUI를 구현합니다.
  2. 사용자로부터 텍스트를 입력받는 기능을 추가합니다.
  3. 입력받은 텍스트를 전처리합니다. (예: 특수 문자 제거, 대소문자 통일 등)
  4. NLTK를 사용하여 텍스트를 감정 분석 모델에 적용합니다.
  5. 결과를 화면에 표시합니다.

프로그램 구현

1. PyQt로 GUI 구현

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("감정 분석 프로그램")
        self.setGeometry(100, 100, 400, 200)

        self.input_label = QLabel(self)
        self.input_label.setText("텍스트 입력:")
        self.input_label.move(20, 20)

        self.input_textbox = QLineEdit(self)
        self.input_textbox.move(120, 20)
        self.input_textbox.resize(200, 25)

        self.analyze_button = QPushButton("분석", self)
        self.analyze_button.move(160, 60)
        self.analyze_button.clicked.connect(self.analyze_text)

        self.result_label = QLabel(self)
        self.result_label.move(20, 110)

    def analyze_text(self):
        # 텍스트를 분석하는 기능을 구현합니다.
        text = self.input_textbox.text()
        # ...

        # 결과를 화면에 표시합니다.
        self.result_label.setText("감정 분석 결과: " + result)
        self.result_label.adjustSize()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

2. 텍스트 입력 기능 추가

class MainWindow(QMainWindow):
    # ...

    def analyze_text(self):
        text = self.input_textbox.text()
        # 텍스트 분석 기능을 호출하고 결과를 화면에 표시합니다.
        self.result_label.setText("감정 분석 결과: " + result)
        self.result_label.adjustSize()

    def analyze_text(self):
        text = self.input_textbox.text()
        cleaned_text = self.preprocess_text(text)
        result = self.analyze_sentiment(cleaned_text)
        self.display_result(result)

    def preprocess_text(self, text):
        # 텍스트 전처리를 구현합니다. (예: 특수 문자 제거, 대소문자 통일 등)
        return cleaned_text

    def analyze_sentiment(self, text):
        # NLTK를 사용하여 텍스트를 감정 분석하는 기능을 구현합니다.
        return sentiment_result

    def display_result(self, result):
        self.result_label.setText("감정 분석 결과: " + str(result))
        self.result_label.adjustSize()

3. NLTK를 사용한 감정 분석 기능 추가

from nltk.sentiment import SentimentIntensityAnalyzer

class MainWindow(QMainWindow):
    # ...

    def analyze_sentiment(self, text):
        sid = SentimentIntensityAnalyzer()
        scores = sid.polarity_scores(text)
        compound_score = scores["compound"]
        if compound_score >= 0.05:
            return "긍정"
        elif compound_score <= -0.05:
            return "부정"
        else:
            return "중립"

4. 실행

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

결론

PyQt를 사용하여 감정 분석 기능을 갖춘 간단한 프로그램을 구현해보았습니다. 이를 통해 사용자는 텍스트를 입력하고 분석 결과를 즉시 확인할 수 있습니다. 이 예시를 통해 PyQt와 NLTK를 활용하여 감정 분석 기능을 구현하는 방법을 이해하실 수 있을 것입니다.

참고 자료