خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه تشخیص احساسات در متن با استفاده از پایتون

تجزیه و تحلیل احساسات به طرز شگفت انگیزی دقیق است و شما می توانید این برنامه ساده Tkinter را بسازید تا آن را امتحان کنید.

تحلیل احساسات تکنیکی برای تعیین لحن احساسی یک قطعه متن است. از پردازش زبان طبیعی، تحلیل متن و زبانشناسی محاسباتی استفاده می کند. با استفاده از این می توانید لحن را به مثبت، خنثی یا منفی طبقه بندی کنید. این به کسب و کارها کمک می کند تا بازخورد مشتریان را در رسانه های اجتماعی، بررسی ها و نظرسنجی ها تجزیه و تحلیل کنند.

بر اساس این داده ها، آنها می توانند محصولات و کمپین های خود را به طور موثرتری استراتژی کنند. یاد بگیرید که چگونه می توانید برنامه ای بسازید که احساسات را با استفاده از پایتون تشخیص دهد.

ماژول Tkinter و vaderSentiment

Tkinter به شما اجازه می دهد تا برنامه های دسکتاپ ایجاد کنید. ویجت‌های مختلفی مانند دکمه‌ها، برچسب‌ها و جعبه‌های متنی را ارائه می‌دهد که توسعه برنامه‌ها را آسان می‌کند. می‌توانید از Tkinter برای ایجاد یک برنامه فرهنگ لغت در پایتون یا ایجاد برنامه خبری خود که داستان‌ها را از طریق یک API به‌روزرسانی می‌کند، استفاده کنید.

برای نصب Tkinter، یک ترمینال را باز کنید و اجرا کنید:

pip install tkinter

VADER (Valence Aware Dictionary and Entiment Reasoner) یک ابزار تحلیل احساسات مبتنی بر واژگان و قانون است. این از پیش ساخته شده است و به طور گسترده در پردازش زبان طبیعی استفاده می شود. الگوریتم دارای مجموعه ای از کلمات از پیش تعریف شده است که احساسات مختلف را نشان می دهد. بر اساس کلمات یافت شده در جمله، این الگوریتم یک نمره قطبیت می دهد. با استفاده از این نمره می توانید مثبت، منفی یا خنثی بودن جمله را تشخیص دهید.

برای نصب بسته vaderSentiment در پایتون، این دستور ترمینال را اجرا کنید:

pip install vaderSentiment

نحوه تشخیص احساسات با استفاده از پایتون

کد منبع این نمونه برنامه را می توانید در مخزن GitHub آن بیابید.

مطلب مرتبط:   نحوه افزودن قابلیت جستجو به برنامه های جنگو

با وارد کردن ماژول های VADER و tkinter مورد نیاز شروع کنید:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from tkinter import *

سپس یک تابع، clearAll() تعریف کنید. هدف آن پاک کردن فیلدهای ورودی است که می توانید با استفاده از متد ()delete از یک شاخص شروع 0 تا شاخص نهایی، END انجام دهید.

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

یک تابع تعریف کنید، detect_sentiment(). از متد get برای واکشی کلمه وارد شده در ویجت textArea و ایجاد یک شی از کلاس SentimentIntensityAnalyzer استفاده کنید. از روش polarity_scores روی متنی که واکشی کردید استفاده کنید و الگوریتم تحلیل احساسات VADER را اعمال کنید.

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

نمره احساسات منفی (‘neg’) را استخراج کنید و آن را به درصد تبدیل کنید. مقدار به دست آمده را در قسمت منفی از موقعیت 10 وارد کنید. همین فرآیند را برای امتیاز احساسات خنثی (‘neu’) و نمره احساسات مثبت (‘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)

مقدار کلید مرکب را که حاوی احساس کلی جمله است استخراج کنید. اگر مقدار بزرگتر یا مساوی 0.05 باشد، جمله مثبت است. اگر مقدار کمتر یا مساوی 0.05- باشد، جمله منفی است. برای مقادیر بین -0.05 و 0.05، یک عبارت خنثی است.

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

نتیجه را از موقعیت 10 در فیلد کلی درج کنید:

    overallField.insert(10, string)

یک پنجره رابط کاربری گرافیکی را با استفاده از Tkinter راه اندازی کنید. رنگ پس زمینه، عنوان و ابعاد پنجره را تنظیم کنید. پنج برچسب ایجاد کنید. یکی که از کاربر می خواهد جمله ای را وارد کند و چهار مورد دیگر برای احساسات مختلف. عنصر والد را که می‌خواهید آن را در آن قرار دهید، متنی که باید نمایش داده شود و سبک‌های قلمی که باید داشته باشد را به همراه رنگ پس‌زمینه تنظیم کنید.

مطلب مرتبط:   چگونه می توان یک رشته را در جاوا اسکریپت قالب بندی کرد؟

یک ویجت متنی برای دریافت جمله از کاربر تعریف کنید. عنصر والدی را که می‌خواهید در آن قرار دهید، ارتفاع، عرض، سبک‌های قلم و رنگ پس‌زمینه‌ای که باید داشته باشد را تنظیم کنید. سه دکمه تعریف کنید یکی برای انجام تجزیه و تحلیل احساسات، یکی برای پاک کردن محتویات پس از استفاده، و دیگری برای خروج از برنامه. پنجره والد آن، متنی که باید نمایش داده شود، رنگ پس‌زمینه، سبک‌های فونت و دستوری که می‌خواهید با کلیک روی آن اجرا شود را تنظیم کنید.

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)

چهار فیلد ورودی برای احساسات مختلف تعریف کنید و پنجره والد و سبک فونت آنها را تنظیم کنید.

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

از یک شبکه متشکل از 13 ردیف و سه ستون برای طرح کلی استفاده کنید. عناصر مختلف مانند برچسب ها، فیلدهای ورودی متن و دکمه ها را در ردیف ها و ستون های مختلف قرار دهید. هر جا که لازم است، بالشتک های لازم را اضافه کنید. گزینه چسبنده را روی “W” تنظیم کنید تا متن های داخل سلول آن تراز چپ شوند.

    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)

تابع mainloop() به پایتون می گوید که حلقه رویداد Tkinter را اجرا کند و تا زمانی که پنجره را ببندید به رویدادها گوش دهد.

    gui.mainloop()

همه کدها را کنار هم قرار دهید و می توانید از برنامه کوتاه به دست آمده برای تشخیص احساسات استفاده کنید.

مطلب مرتبط:   درک برنامه Minimal Go

خروجی تشخیص احساسات با استفاده از پایتون

با اجرای این برنامه، پنجره VADER Sentiment Analyzer ظاهر می شود. وقتی برنامه را روی یک جمله مثبت آزمایش کردیم، آن را با دقت 79٪ تشخیص داد. با امتحان یک عبارت خنثی و یک عبارت منفی، برنامه توانست به ترتیب با دقت 100% و 64.3% تشخیص دهد.

خروجی تحلیلگر احساسات VADER

جایگزین هایی برای تجزیه و تحلیل احساسات با استفاده از پایتون

می‌توانید از Textblob برای تحلیل احساسات، برچسب‌گذاری گفتار و طبقه‌بندی متن استفاده کنید. دارای یک API ثابت و طبقه‌بندی‌کننده قطبیت احساسات داخلی است. NLTK یک کتابخانه جامع NLP است که شامل طیف گسترده ای از ابزارها برای تجزیه و تحلیل متن است، اما دارای منحنی یادگیری شیب دار برای مبتدیان است.

یکی از محبوب ترین ابزارها IBM Watson NLU است. این مبتنی بر ابر است، از چندین زبان پشتیبانی می کند و دارای ویژگی هایی مانند شناسایی موجودیت و استخراج کلید است. با معرفی GPT، می توانید از OpenAI API استفاده کنید و آن را در برنامه های خود ادغام کنید تا احساسات مشتری دقیق و قابل اعتماد را در زمان واقعی دریافت کنید.