Cách nhận diện quan điểm trong văn bản bằng Python

Bạn có thể xây dựng app Tkinter đơn giản để phân tích quan điểm trong văn bản. Dưới đây là hướng dẫn chi tiết.

Phát hiện quan điểm

Phân tích quan điểm là kỹ thuật quyết định mức độ cảm xúc của một đoạn văn bản. Nó dùng xử lý ngôn ngữ tự nhiên, phân tích văn bản và ngôn ngữ học tính toán. Nhờ chúng, bạn có thể phân loại quan điểm thành tích cực, tiêu cực hoặc trung lập. Điều này giúp doanh nghiệp phân tích phản hồi của khách hàng trên mạng xác hội, đánh giá và khảo sát.

Dựa trên dữ liệu này, họ có thể lên chiến lược sản phẩm và chiến dịch quảng cáo hiệu quả hơn. Sau đây là cách xây dựng ứng dụng phát hiện quan điểm bằng Python.

Mô đun Tkinter và vaderSentiment

Tkinter cho phép bạn tạo ứng dụng desktop. Nó cung cấp một loạt widget như nút bấm, nhãn dán và hộp văn bản để phát triển app dễ dàng. Bạn có thể dùng Tkinter để xây dựng một ứng dụng từ điển trong Python hoặc tạo app mới mà update qua API.

Để cài đặt Tkinter, mở terminal và khởi chạy:

pip install tkinter

VADER (Valence Aware Dictionary & sEntiment Reasoner) là công cụ phân tích cảm xúc dựa trên quy tắc và từ vựng. Nó được xây dựng sẵn và được sử dụng rộng rãi trong Xử lý ngôn ngữ tự nhiên. Thuật toán có một tập hợp các từ được xác định trước đại diện cho những quan điểm khác nhau. Dựa trên các từ được tìm thấy trong câu, thuật toán này cho sẽ chấm điểm để xác định câu đó là tích cực, tiêu cực hay trung lập.

Để cài đặt gói vaderSentiment trong Python, chạy lệnh terminal sau:

pip install vaderSentiment

Cách phát hiện quan điểm bằng Python

Bắt đầu bằng cách nhập VADER và mô đun tkinter cần thiết:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from tkinter import *

Sau đó, xác định một hàm, clearAll(). Mục đích của nó là xóa các trường input mà bạn có thể dùng phương thức delete() từ index bắt đầu của 0 tới index cuối cùng, END.

def clearAll():
    negativeField.delete(0, END)
    neutralField.delete(0, END)
    positiveField.delete(0, END)
    overallField.delete(0, END)
    textArea.delete(1.0, END)

Xác định hàm detect_sentiment(). Dùng phương thức get để tìm nạp từ được nhập trong widget textArea và tạo một đối tượng của class SentimentIntensityAnalyzer. Dùng polarity_scores trên văn bản bạn đã tìm nạp và áp dụng thuật toán phân tích quan điểm VADER.

def detect_sentiment():
    sentence = textArea.get("1.0", "end")
    sentiment_obj = SentimentIntensityAnalyzer()
    sentiment_dict = sentiment_obj.polarity_scores(sentence)

Trích xuất điểm quan điểm tiêu cực ('neg') và chuyển nó sang dạng phần trăm. Chèn giá trị nằm trong negativeField bắt đầu từ vị trí 10. Lặp lại quá trình này cho điểm quan điểm trung lập ('neu') và tích cực ('pos').

    string = str(sentiment_dict['neg'] * 100)
    negativeField.insert(10, string)

    string = str(sentiment_dict['neu'] * 100)
    neutralField.insert(10, string)

    string = str(sentiment_dict['pos'] * 100)
    positiveField.insert(10, string)

Truy xuất giá trị của khóa thành phần chứa quan điểm tổng thể của câu. Nếu giá trị lớn hơn hoặc bằng 0.05, câu đó là tích cực. Nếu giá trị nhỏ hơn hoặc bằng -0.05, câu đó là tiêu cực. Đối với các giá trị nằm giữa -0.05 và 0.05, câu đó là trung lập.

    if sentiment_dict['compound'] >= 0.05:
        string = "Positive"
    elif sentiment_dict['compound'] <= - 0.05:
        string = "Negative"
    else:
        string = "Neutral"

Chèn kết quả vào overallField từ vị trí thứ 10:

    overallField.insert(10, string)

Khởi tạo cửa sổ giao diện người dùng đồ họa bằng Tkinter. Đặt màu nền, tiêu đề và kích thước của cửa sổ. Tạo 5 nhãn. Một yêu cầu người dùng nhập một câu và bốn câu còn lại cho các quan điểm khác nhau. Đặt phần tử gốc mà bạn muốn đặt phần tử đó vào, văn bản mà phần tử đó sẽ hiển thị và kiểu phông chữ mà phần tử đó phải có cùng với màu nền.

Xác định widget Text để nhận câu từ người dùng. Đặt phần tử gốc mà bạn muốn đặt phần tử đó, chiều cao, chiều rộng, kiểu phông chữ và màu nền mà phần tử đó phải có. Xác định ba nút. Một để thực hiện phân tích quan điểm, một để xóa nội dung sau khi sử dụng và một để thoát khỏi ứng dụng. Đặt cửa sổ chính của nó, văn bản sẽ hiển thị, màu nền, kiểu phông chữ và lệnh bạn muốn thực thi khi nhấp vào.

if __name__ == "__main__":
    gui = Tk()
    gui.config(background="#A020f0")
    gui.title("VADER Sentiment Analyzer")
    gui.geometry("400x700")
    enterText = Label(gui, text="Enter Your Sentence: ",font="arial 15 bold",bg="#A020f0")
    negative = Label(gui, text="Negative Percentage: ", font="arial 15",bg="#A020f0") 
    neutral = Label(gui, text="Nuetral Percentage: ", font="arial 15",bg="#A020f0") 
    positive = Label(gui, text="Positive Percentage: ", font="arial 15",bg="#A020f0") 
    overall = Label(gui, text="Overall Sentence is: ", font="arial 15",bg="#A020f0")
    textArea = Text(gui, height=5, width=25, font="arial 15", bg="#cf9fff")
    check = Button(gui, text="Check Sentiment", bg="#e7305b", font=("arial", 12, "bold"), command=detect_sentiment)
    clear = Button(gui, text="Clear", bg="#e7305b", font=("arial", 12, "bold"), command=clearAll)
    Exit = Button(gui, text="Exit", bg="#e7305b", font=("arial", 12, "bold"), command=exit)

Xác định các trường Entry cho những quan điểm khác nhau và đặt cửa sổ chính và kiểu font.

    negativeField = Entry(gui, font="arial 15")
    neutralField = Entry(gui, font="arial 15")
    positiveField = Entry(gui, font="arial 15")
    overallField = Entry(gui, font="arial 15")

Dùng kẻ ô chứa 13 hàng và 3 cột cho bố cục tổng thể. Đặt các phần tử khác nhau như nhãn dán, trường mục văn bản và nút bấm theo các hàng và cột khác nhau như được mô tả. Thêm padding cần thiết bất cứ khi nào cần. Đặt lựa chọn sticky sang W để căn trái văn bản trong ô của nó.

    enterText.grid(row=0, column=2, pady=15)
    textArea.grid(row=1, column=2, padx=60, pady=10, sticky=W)
    check.grid(row=2, column=2, pady=10)
    negative.grid(row=3, column=2, pady=10)
    neutral.grid(row=5, column=2, pady=10)
    positive.grid(row=7, column=2, pady=10)
    overall.grid(row=9, column=2, pady=5)
    negativeField.grid(row=4, column=2)
    neutralField.grid(row=6, column=2)
    positiveField.grid(row=8, column=2)
    overallField.grid(row=10, column=2, pady=10)
    clear.grid(row=11, column=2, pady=10)
    Exit.grid(row=12, column=2, pady=10)

Hàm mainloop() báo Python chạy lặp sự kiện Tkinter và nghe các sự kiện cho tới khi bạn đóng cửa sổ.

   gui.mainloop()

Đặt toàn bộ code lại với nhau và bạn có thể dùng chương trình kết quả để phát hiện quan điểm.

Kết quả của phát hiện quan điểm bằng Python

Khi chạy chương trình này, quan điểm cửa sổ VADER Sentiment Analyzer sẽ hiện. Khi kiểm tra chương trình trên câu tích cực, nó đã phát hiện quan điểm chính xác tới 79%. Khi dùng lệnh trung lập và phủ định, chương trình có thể phát hiện chính xác lần lượt là 100% và 64.3%.

Kết quả phát hiện quan điểm bằng Python

Trên đây là cách phát hiện quan điểm trong văn bản bằng Python. Hi vọng bài viết hữu ích với các bạn.

Thứ Năm, 29/06/2023 16:46
52 👨 182
0 Bình luận
Sắp xếp theo
    ❖ Python