Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การวิเคราะห์ความรู้สึก Twitter ด้วยการเขียนโปรแกรม Python

การวิเคราะห์ความรู้สึก (Sentiment Analysis) เป็นกระบวนการประมาณการความรู้สึกของผู้คนที่ให้ความคิดเห็นต่อเหตุการณ์บางอย่างผ่านข้อความเขียนหรือการสื่อสารด้วยวาจา โดยการสื่อสารด้วยวาจาก็ต้องแปลงเป็นข้อความเขียนก่อนจึงจะวิเคราะห์ผ่านโปรแกรม Python ได้ ความรู้สึกที่แสดงออกอาจเป็นบวกหรือลบ โดยการกำหนดน้ำหนักให้คำต่างๆ ในข้อความความรู้สึก เราคำนวณค่าตัวเลขและนั่นให้การประเมินทางคณิตศาสตร์ของความรู้สึก

ประโยชน์

  • ความคิดเห็นลูกค้า (Customer Feedback) − สำคัญสำหรับธุรกิจที่จะทราบความคิดเห็นของลูกค้าต่อผลิตภัณฑ์หรือบริการ เมื่อความคิดเห็นของลูกค้ามีอยู่ในรูปข้อความเขียน เราสามารถรันการวิเคราะห์ความรู้สึกใน Twitter เพื่อค้นหาผลรวมของความคิดเห็นเป็นบวกหรือลบโดยอัตโนมัติและดำเนินการแก้ไข

  • แคมเปญการเมือง (Political Campaigns) − สำหรับคู่แข่งทางการเมือง การทราบปฏิกิริยาของผู้คนที่พวกเขาพูดสุนทรพจน์นั้นสำคัญมาก หากความคิดเห็นจากสาธารณะสามารถรวบรวมผ่านแพลตฟอร์มออนไลน์เช่นโซเชียลมีเดีย เราสามารถตัดสินใจตอบสนองของประชาชนต่อสุนทรพจน์เฉพาะได้

  • โครงการรัฐบาล (Government Initiatives) − เมื่อรัฐบาลนำแผนใหม่ๆ มาดำเนินการจากเวลาไปเวลามา พวกเขาสามารถตัดสินปฏิกิริยาต่อแผนใหม่โดยการรับความคิดเห็นของสาธารณะ บ่อยครั้งสาธารณะแสดงความชมชอบหรือโมโหผ่าน Twitter

แนวทาง

ด้านล่างเราระบุขั้นตอนที่จำเป็นในการสร้างโปรแกรมวิเคราะห์ความรู้สึกใน Python

  • ก่อนอื่นเราติดตั้ง Tweepy และ TextBlob โมดูลนี้จะช่วยรวบรวมข้อมูลจาก Twitter และแยกข้อความและประมวลผล

  • การยืนยันตัวตนกับ Twitter เราต้องใช้ API keys เพื่อให้สามารถดึงข้อมูลจาก Twitter ได้

  • จากนั้นเราจัดกลุ่มทวีตเป็นทวีตบวกและลบตามข้อความในทวีต

ตัวอย่าง

import re
import tweepy
from tweepy import OAuthHandler
from textblob import TextBlob

class Twitter_User(object):
    def __init__(self):
        consumer_key = '1ZG44GWXXXXXXXXXjUIdse'
        consumer_secret = 'M59RI68XXXXXXXXXXXXXXXXV0P1L6l7WWetC'
        access_token = '865439532XXXXXXXXXX9wQbgklJ8LTyo3PhVDtF'
        access_token_secret = 'hbnBOz5XXXXXXXXXXXXXefIUIMrFVoc'
        try:
            self.auth = OAuthHandler(consumer_key, consumer_secret)
            self.auth.set_access_token(access_token, access_token_secret)
            self.api = tweepy.API(self.auth)
        except:
            print("Error: Authentication Failed")

    def pristine_tweet(self, twitter):
        return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", " ", twitter).split())

    def Sentiment_Analysis(self, twitter):
        audit = TextBlob(self.pristine_tweet(twitter))
        # set sentiment
        if audit.sentiment.polarity > 0:
            return 'positive'
        elif audit.sentiment.polarity == 0:
            return 'negative'

    def tweet_analysis(self, query, count=10):
        twitter_tweets = []
        try:
            get_twitter = self.api.search(q=query, count=count)
            for tweets in get_twitter:
                inspect_tweet = {}
                inspect_tweet['text'] = tweets.text
                inspect_tweet['sentiment'] = self.Sentiment_Analysis(tweets.text)
                if tweets.retweet_count > 0:
                    if inspect_tweet not in twitter_tweets:
                        twitter_tweets.append(inspect_tweet)
                else:
                    twitter_tweets.append(inspect_tweet)
            return twitter_tweets
        except tweepy.TweepError as e:
            print("Error : " + str(e))

def main():
    api = Twitter_User()
    twitter_tweets = api.tweet_analysis(query='Ram Nath Kovind', count=200)
    Positive_tweets = [tweet for tweet in twitter_tweets if tweet['sentiment'] == 'positive']
    print("Positive tweets percentage: {} %".format(100 * len(Positive_tweets) / len(twitter_tweets)))
    Negative_tweets = [tweet for tweet in twitter_tweets if tweet['sentiment'] == 'negative']
    print("Negative tweets percentage: {} %".format(100 * len(Negative_tweets) / len(twitter_tweets)))
    print("\n\nPositive_tweets:")
    for tweet in Positive_tweets[:10]:
        print(tweet['text'])
    print("\n\nNegative_tweets:")
    for tweet in Negative_tweets[:10]:
        print(tweet['text'])

if __name__ == "__main__":
    main()

ผลลัพธ์

การรันโค้ดข้างต้นจะได้ผลดังนี้ −

Positive tweets percentage: 48.78048780487805 %
Negative tweets percentage: 46.34146341463415 %
Positive_tweets:
RT @heartful_ness: "@kanhashantivan presents a model of holistic living. My deep & intimate association with this organisation goes back to...
RT @heartful_ness: Heartfulness Guide @kamleshdaaji welcomes honorable President of India Ram Nath Kovind @rashtrapatibhvn, honorable first...
RT @DrTamilisaiGuv: Very much pleased by the affection shown by our Honourable President Sri Ram Nath Kovind and First Lady madam Savita Ko...
RT @BORN4WIN: Who became the first President of India from dalit community? A) K.R. Narayanan B) V. Venkata Giri C) R. Venkataraman D) Ram...
Negative_tweets:
RT @Keyadas63: What wuld those #empoweredwomen b termed who reach Hon HC at the drop of a hat But Demand #Alimony Maint? @MyNation_net @vaa...
RT @heartful_ness: Thousands of @heartful_ness practitioners meditated with Heartfulness Guide @kamleshdaaji at @kanhashantivan & await the...
RT @TurkeyinDelhi: Ambassador Sakir Ozkan Torunlar attended the Joint Session of Parliament of #India and listened the address of H.E. Shri...