Dieser Artikel behandelt die Stimmungsanalyse eines Themas, indem die von Twitter mit Python abgerufenen Tweets analysiert werden.

Stimmungsanalyse

Was ist Stimmungsanalyse?
Die Stimmungsanalyse ist der Prozess der "rechnerischen" Bestimmung, ob eine Schrift positiv, negativ oder neutral ist. Es ist auch als Opinion Mining bekannt und leitet die Meinung oder Haltung eines Sprechers ab.

Warum Stimmungsanalyse?

  • Geschäft: Im Marketingbereich entwickeln Unternehmen damit ihre Strategien, verstehen die Gefühle der Kunden gegenüber Produkten oder Marken, wie Menschen auf ihre Kampagnen oder Produkteinführungen reagieren und warum Verbraucher bestimmte
    Produkte nicht kaufen .
  • Politik: Im politischen Bereich wird es verwendet, um die politische Sichtweise im Auge zu behalten und Konsistenz und Inkonsistenz zwischen Aussagen und Handlungen auf Regierungsebene festzustellen. Es kann auch verwendet werden, um Wahlergebnisse vorherzusagen!
  • Öffentliche Aktionen: Die Stimmungsanalyse wird auch verwendet, um soziale Phänomene zu überwachen und zu analysieren, um potenziell gefährliche Situationen zu erkennen und die allgemeine Stimmung der Blogosphäre zu bestimmen.

Installation:



  • Tweepy: Tweepy ist der Python-Client für die offizielle Twitter-API .
    Installieren Sie es mit dem folgenden Befehl pip:
    pip installieren tweepy
  • TextBlob: textblob ist die Python-Bibliothek zur Verarbeitung von Textdaten.
    Installieren Sie es mit dem folgenden Befehl pip:
    pip install textblob

    Außerdem müssen wir einige NLTK-Korpora mit dem folgenden Befehl installieren:

    python -m textblob.download_corpora

    (Corpora ist nichts anderes als eine große und strukturierte Sammlung von Texten.)

Authentifizierung:
Um Tweets über die Twitter-API abzurufen, muss eine App über ihr Twitter-Konto registriert werden. Befolgen Sie diese Schritte für das gleiche:

  • Öffnen Sie diesen Link und klicken Sie auf die Schaltfläche: 'Neue App erstellen'
  • Füllen Sie die Anwendungsdetails aus. Sie können das Rückruf-URL-Feld leer lassen.
  • Sobald die App erstellt wurde, werden Sie zur App-Seite weitergeleitet.
  • Öffnen Sie die Registerkarte "Schlüssel und Zugriffstoken".
  • Kopieren Sie "Consumer Key", "Consumer Secret", "Access Token" und "Access Token Secret".

Implementierung:

import re 
import tweepy 
from tweepy import OAuthHandler 
from textblob import TextBlob 
  
class TwitterClient(object): 
    
    
    
    def __init__(self): 
        
        
        
        
        consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXX'
        consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
        access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
        access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXX'
  
        
        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 clean_tweet(self, tweet): 
        
        
        
        
        return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t]) 
                                    |(\w+:\/\/\S+)", " ", tweet).split()) 
  
    def get_tweet_sentiment(self, tweet): 
        
        
        
        
        
        analysis = TextBlob(self.clean_tweet(tweet)) 
        
        if analysis.sentiment.polarity > 0: 
            return 'positive'
        elif analysis.sentiment.polarity == 0: 
            return 'neutral'
        else: 
            return 'negative'
  
    def get_tweets(self, query, count = 10): 
        
        
        
        
        tweets = [] 
  
        try: 
            
            fetched_tweets = self.api.search(q = query, count = count) 
  
            
            for tweet in fetched_tweets: 
                
                parsed_tweet = {} 
  
                
                parsed_tweet['text'] = tweet.text 
                
                parsed_tweet['sentiment'] = self.get_tweet_sentiment(tweet.text) 
  
                
                if tweet.retweet_count > 0: 
                    
                    if parsed_tweet not in tweets: 
                        tweets.append(parsed_tweet) 
                else: 
                    tweets.append(parsed_tweet) 
  
            
            return tweets 
  
        except tweepy.TweepError as e: 
            
            print("Error : " + str(e)) 
  
def main(): 
    
    api = TwitterClient() 
    
    tweets = api.get_tweets(query = 'Donald Trump', count = 200) 
  
    
    ptweets = [tweet for tweet in tweets if tweet['sentiment'] == 'positive'] 
    
    print("Positive tweets percentage: {} %".format(100*len(ptweets)/len(tweets))) 
    
    ntweets = [tweet for tweet in tweets if tweet['sentiment'] == 'negative'] 
    
    print("Negative tweets percentage: {} %".format(100*len(ntweets)/len(tweets))) 
    
    print("Neutral tweets percentage: {} % \ 
        ".format(100*(len(tweets) -(len( ntweets )+len( ptweets)))/len(tweets))) 
  
    
    print("\n\nPositive tweets:") 
    for tweet in ptweets[:10]: 
        print(tweet['text']) 
  
    
    print("\n\nNegative tweets:") 
    for tweet in ntweets[:10]: 
        print(tweet['text']) 
  
if __name__ == "__main__": 
    
    main() 

So sieht eine Beispielausgabe aus, wenn das obige Programm ausgeführt wird:

Positiver Tweets-Prozentsatz: 22%
Prozentsatz der negativen Tweets: 15%
Positive Tweets:
RT @JohnGGalt: Erstaunlich - nach Jahren des Angriffs auf Donald Trump gelang es den Medien
#InaugurationDay in alles über sich selbst verwandeln.
# MakeAme…
RT @ vooda1: CNN lehnt Live-Pressekonferenz des Weißen Hauses ab JA!
DANKE @CNN FÜR NICHT LEGITIMI…
RT @Muheeb_Shawwa: Donald J. Trumps Rede klang unheimlich vertraut ...
POTUS plant einen neuen Vertrag für Großbritannien, da Theresa May die erste ausländische Führungskraft sein wird, die sich neu trifft
Präsident seit der Amtseinführung
. @ realdonaldtrump #Syria #Mexico #Russia & jetzt #Afghanistan.
Ein weiterer #DearDonaldTrump-Brief, der es wert ist, gelesen zu werden @AJEnglish
Negative Tweets:
RT @Slate: Donald Trumps Regierung: "Regierung durch die schlimmsten Männer."
RT @ RVAwonk: Sean Spicer Trump et al. Lüge aus einem Grund.
Ihre Lügen sind nicht nur Lügen. Ihre Lügen sind autoritäre Propaganda.
RT @KomptonMusic: Ich: Ich hasse Mais
Donald Trump: Ich hasse auch Mais
Ich: https://t.co/GPgy8R8HB5
Es ist lächerlich, dass sich die Leute darüber mehr ärgern als Donald Trumps Sexismus.
RT @tony_broach: Chris Wallace in den Fox-Nachrichten redet gerade Mist
über die Pressekonferenz von Donald Trump scheint es, als könne er sich der Wahrheit nicht stellen ...
RT @fravel: Mit falschen Behauptungen greift Donald Trump Medien auf Massenbeteiligung an
Aziz Ansari hat Donald Trump in einem epischen Live-Monolog am Samstag hart getroffen

Wir folgen diesen 3 Hauptschritten in unserem Programm:

  • Autorisieren Sie den Twitter API-Client.
  • Stellen Sie eine GET-Anfrage an die Twitter-API, um Tweets für eine bestimmte Abfrage abzurufen.
  • Analysieren Sie die Tweets. Klassifizieren Sie jeden Tweet als positiv, negativ oder neutral.

Versuchen wir nun, den obigen Code zu verstehen:



  • Zunächst erstellen wir eine TwitterClient- Klasse. Diese Klasse enthält alle Methoden zur Interaktion mit der Twitter-API und zum Parsen von Tweets. Wir verwenden die Funktion __init__ , um die Authentifizierung des API-Clients durchzuführen .
  • In der Funktion get_tweets verwenden wir:
    fetched_tweets = self.api.search (q = Abfrage, Anzahl = Anzahl)

    um die Twitter-API aufzurufen und Tweets abzurufen.

  • In get_tweet_sentiment verwenden wir das Textblob-Modul.
    analysis = TextBlob (self.clean_tweet (tweet))

    TextBlob ist eine Bibliothek auf hoher Ebene, die über der NLTK- Bibliothek aufgebaut ist. Zuerst rufen wir die clean_tweet- Methode auf, um Links, Sonderzeichen usw. mit einem einfachen regulären Ausdruck aus dem Tweet zu entfernen. Wenn
    wir dann einen Tweet übergeben , um ein TextBlob- Objekt zu erstellen , erfolgt die folgende Verarbeitung über Text durch die Textblob-Bibliothek:

    • Tokenisieren Sie den Tweet, dh trennen Sie Wörter vom Textkörper.
    • Entfernen Sie Stoppwörter aus den Token. (Stoppwörter sind die häufig verwendeten Wörter, die in der Textanalyse irrelevant sind, wie ich, bin, Sie, sind usw.)
    • Führen Sie eine POS-Kennzeichnung (Teil der Sprache) der Token durch und wählen Sie nur wichtige Funktionen / Token wie Adjektive, Adverbien usw. aus.
    • Übergeben Sie die Token an einen Stimmungsklassifizierer, der die Tweet-Stimmung als positiv, negativ oder neutral klassifiziert, indem Sie ihm eine Polarität zwischen -1,0 und 1,0 zuweisen.

    So wird ein Stimmungsklassifikator erstellt:

    • TextBlob verwendet einen Datensatz für Filmbewertungen, in dem Bewertungen bereits als positiv oder negativ gekennzeichnet wurden.
    • Positive und negative Merkmale werden aus jeder positiven bzw. negativen Bewertung extrahiert.
    • Die Trainingsdaten bestehen jetzt aus gekennzeichneten positiven und negativen Merkmalen. Diese Daten werden auf einem Naive Bayes Classifier trainiert .

    Dann verwenden wir die sentiment.polarity- Methode der TextBlob- Klasse, um die Polarität des Tweets zwischen -1 und 1 zu erhalten.
    Dann klassifizieren wir die Polarität als:

    wenn analysis.sentiment.polarity> 0:
           Rückgabe 'positiv'
    elif analysis.sentiment.polarity == 0:
           Rückgabe 'neutral'
    sonst:
           Rückgabe 'negativ'
  • Schließlich werden analysierte Tweets zurückgegeben. Dann können wir verschiedene Arten von statistischen Analysen für die Tweets durchführen. Im obigen Programm haben wir beispielsweise versucht, den Prozentsatz positiver, negativer und neutraler Tweets zu einer Abfrage zu ermitteln.

Verweise:

Dieser Artikel wurde von Nikhil Kumar verfasst . Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel mit Contrib.geeksforgeeks.org schreiben oder Ihren Artikel an Contribute@geeksforgeeks.org senden. Sehen Sie sich Ihren Artikel auf der GeeksforGeeks-Hauptseite an und helfen Sie anderen Geeks.

Bitte schreiben Sie Kommentare, wenn Sie etwas Falsches finden oder weitere Informationen zu dem oben diskutierten Thema teilen möchten.

Geeks-Digest-Img