Cách phát hiện cảm xúc trong văn bản bằng Python
Phân tích tình cảm là một kỹ thuật để xác định giai điệu cảm xúc của một đoạn văn bản. Nó sử 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. Sử dụng điều này, bạn có thể phân loại giai điệu thành tích cực, trung lập hoặc tiêu cực. Đ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 phương tiện truyền thông xã hội, đánh giá và khảo sát.
Dựa trên dữ liệu này, họ có thể lập chiến lược cho các sản phẩm và chiến dịch của mình hiệu quả hơn. Tìm hiểu cách bạn có thể xây dựng ứng dụng phát hiện cảm xúc bằng Python.
Mục Lục
Mô-đun Tkinter và vaderSentiment
Tkinter cho phép bạn tạo các ứng dụng máy tính để bàn. Nó cung cấp nhiều tiện ích như nút, nhãn và hộp văn bản giúp dễ dàng phát triển ứng dụng. Bạn có thể sử dụng Tkinter để xây dựng ứng dụng từ điển bằng Python hoặc để tạo ứng dụng tin tức của riêng mình để cập nhật các câu chuyện thông qua API.
Để cài đặt Tkinter, hãy mở terminal và chạy:
pip install tkinter
VADER (Valence Aware Dictionary and sEntiment Reasoner) là một 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 các tình cả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 điểm phân cực. Sử dụng điểm số này, bạn có thể xác định xem câu đó là tích cực, tiêu cực hay trung tính.
Để cài đặt gói vaderSentiment trong Python, hãy chạy lệnh đầu cuối này:
pip install vaderSentiment
Cách phát hiện tình cảm bằng Python
Bắt đầu bằng cách nhập các mô-đun VADER và tkinter cần thiết:
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from tkinter import *
Sau đó xác định một chức năng, Làm sạch tất cả(). Mục đích của nó là để xóa các trường nhập liệu mà bạn có thể thực hiện bằng cách sử dụng xóa bỏ() phương pháp từ một chỉ số bắt đầu của 0 đến chỉ số cuối cùng, KẾT THÚC.
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 một chức năng, detect_sentiment(). Sử dụng phương thức get để lấy từ đã nhập trong khu vực văn bản widget và tạo một đối tượng của Tình CảmCường ĐộMáy Phân Tích lớp học. Sử 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 tình cả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 số tình cảm tiêu cực (‘phủ định’) và chuyển đổi nó thành tỷ lệ phần trăm. Chèn giá trị thu được vào trường phủ định bắt đầu từ vị trí 10. Lặp lại quy trình tương tự cho điểm số tình cảm trung lập (‘neu’) và điểm tình cảm tích cực (‘tư thế’).
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)
Trích xuất giá trị của khóa ghép chứa đựng tình cảm chung 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à phủ định. Đối với các giá trị từ -0,05 đến 0,05, đó là một tuyên bố 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 lĩnh vực tổng thể 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 năm 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 tình cả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 tiện ích Văn bản để 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 tình cả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 bốn trường Mục nhập cho các tình cảm khác nhau và đặt kiểu phông chữ và cửa sổ chính của chúng.
negativeField = Entry(gui, font="arial 15")
neutralField = Entry(gui, font="arial 15")
positiveField = Entry(gui, font="arial 15")
overallField = Entry(gui, font="arial 15")
Sử dụng lưới bao gồm 13 hàng và ba cột cho bố cục tổng thể. Đặt các thành phần khác nhau như nhãn, trường nhập văn bản và nút trong các hàng và cột khác nhau như được mô tả. Thêm phần đệm cần thiết bất cứ nơi nào cần thiết. Đặt dính tùy chọn để “W” để căn trái các 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)
Các vòng lặp chính() hàm yêu cầu Python chạy vòng lặp sự kiện Tkinter và lắng nghe các sự kiện cho đến khi bạn đóng cửa sổ.
gui.mainloop()
Đặt tất cả mã lại với nhau và bạn có thể sử dụng chương trình ngắn kết quả để phát hiện cảm xúc.
Đầu ra của việc phát hiện tình cảm bằng Python
Khi chạy chương trình này, cửa sổ Trình phân tích tình cảm VADER sẽ xuất hiện. Khi chúng tôi thử nghiệm chương trình trên một câu tích cực, nó đã phát hiện ra nó với độ chính xác là 79%. Khi thử một câu trung lập và một câu phủ định, chương trình có thể phát hiện với độ chính xác lần lượt là 100% và 64,3%.
Các lựa chọn thay thế cho Phân tích tình cảm bằng Python
Bạn có thể sử dụng Textblob để phân tích tình cảm, gắn thẻ bài phát biểu và phân loại văn bản. Nó có một API nhất quán và một bộ phân loại phân cực tình cảm được tích hợp sẵn. NLTK là một thư viện NLP toàn diện chứa nhiều loại công cụ để phân tích văn bản nhưng có đường cong học tập dốc cho người mới bắt đầu.
Một trong những công cụ phổ biến nhất là IBM Watson NLU. Nó dựa trên đám mây, hỗ trợ một số ngôn ngữ và có các tính năng như nhận dạng thực thể và trích xuất khóa. Với việc giới thiệu GPT, bạn có thể sử dụng API OpenAI và tích hợp nó vào các ứng dụng của mình để có được cảm tính của khách hàng chính xác và đáng tin cậy trong thời gian thực.