Das Sentiment von Tweets mit Java analysieren

Eine Einführung in NLP mit Java

Foto von Hitesh Choudhary auf Unsplash

Für mein Abschlussprojekt für einen fortgeschrittenen Java-Kurs, den ich in der Schule belegte, entschied ich mich, mein Interesse an maschinellem Lernen mit Java zu kombinieren und ein Projekt zur Verarbeitung natürlicher Sprache zu machen. Eines der grundlegendsten Projekte zur Verarbeitung natürlicher Sprache ist die Analyse der Stimmungsanalyse von Tweets auf Twitter. Also habe ich natürlich versucht, die Stimmungen von Tweets mit den Worten „USA Coronavirus Response“ zu analysieren.

Abrufen der Daten.

Zu Beginn eines Machine-Learning-Projekts müssen Sie zunächst Daten beschaffen. Um die Tweets zu erhalten, die Sie für Ihre Analyse benötigen, müssen Sie auf die Twitter-API zugreifen. Python hat eine Menge Bibliotheken, um dies zu tun, wie z. B. Tweepy. Wir verwenden jedoch Java, das nicht so viele Pakete wie Python hat, aber es hat ein großartiges Twitter-API-Paket, mit dem wir Daten abrufen können: twitter4j . Zuerst sollten Sie das Paket installieren, ich empfehle die Verwendung von Maven als Build-Manager für das Projekt. Um also die twitter4j-Bibliothek zu Ihrem Java-Projekt hinzuzufügen, fügen Sie diese zu Ihrem pom.xml-Leben hinzu.

<dependencies>
<dependency>
            <groupId>org.twitter4j</groupId>
            <artifactId>twitter4j-core</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.twitter4j</groupId>
            <artifactId>twitter4j-async</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
</dependency>
</dependencies>

Hier ist der Code, den Sie zum Scrapen der Daten benötigen. Machen Sie dies zu Ihrer Main.java-Datei.

package sample;
​
import twitter4j.*;
import twitter4j.conf.ConfigurationBuilder;
​
public class Main{
    ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey("Your Consumer Key")               .setOAuthConsumerSecret("Your Consumer Secret")
                .setOAuthAccessToken("Your Access Token")                .setOAuthAccessTokenSecret("Your Access Token Secret");
        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();
        Query query = new Query("USA Coronavirus Response");
        query.setCount(100);
        QueryResult result = twitter.search(query);
}

Erstellen der Sentiment Analyzer-Klasse

Um unsere Sentiment Analyzer-Klasse zu erstellen, verwenden wir das CoreNLP-Paket von Standford. Um dieses Paket zu Ihrem Projekt hinzuzufügen, fügen Sie Ihrer pom.xml-Datei die folgende Abhängigkeit hinzu.

<dependency>
            <groupId>edu.stanford.nlp</groupId>
            <artifactId>stanford-corenlp</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>edu.stanford.nlp</groupId>
            <artifactId>stanford-corenlp</artifactId>
            <version>4.0.0</version>
            <classifier>models</classifier>
</dependency>

package sample;
import java.util.Properties;
import org.ejml.simple.SimpleMatrix;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.sentiment.SentimentCoreAnnotations;
import edu.stanford.nlp.sentiment.SentimentCoreAnnotations.SentimentAnnotatedTree;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.util.CoreMap;
​
public class SentimentAnalyzer {
    static StanfordCoreNLP pipeline;
​
​
    public static void init() {
        Properties props = new Properties();
        props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
        pipeline = new StanfordCoreNLP(props);
    }
​
    public static void main(String[] args) {
        init();
    }
​
​
    public static String findSentiment(String tweet) {
​
        int mainSentiment = 0;
        String sentimentType = "NULL";
        if (tweet != null && tweet.length() > 0) {
            int longest = 0;
            Annotation annotation = pipeline.process(tweet);
            for (CoreMap sentence : annotation
                    .get(CoreAnnotations.SentencesAnnotation.class)) {
                Tree tree = sentence
                        .get(SentimentAnnotatedTree.class);
                int sentiment = RNNCoreAnnotations.getPredictedClass(tree);
                sentimentType = sentence.get(SentimentCoreAnnotations.SentimentClass.class);
            }
        }
        return sentimentType;
        //sentiment ranges from very negative, negative, neutral, positive, very positive
    }
​
}

Alles zusammenfügen

Wir werden alles in der Datei Main.java zusammenfassen. Hier ist der Code:

package sample;
​
import twitter4j.*;
import twitter4j.conf.ConfigurationBuilder;
import static sample.SentimentAnalyzer.findSentiment;
import static sample.SentimentAnalyzer.init;
​
public class Main{
    SentimentAnalyzer.init();
    ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey("Your Consumer Key")               .setOAuthConsumerSecret("Your Consumer Secret")
                .setOAuthAccessToken("Your Access Token")                .setOAuthAccessTokenSecret("Your Access Token Secret");
        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();
        Query query = new Query("USA Coronavirus Response");
        query.setCount(100);
        QueryResult result = twitter.search(query);
    //The following lines of code initialize variables that represent the number of tweets of each sentiment. 
    
    int num_neutral = 0;
    int num_negative = 0;
    int num_realnegative = 0;
    int num_positive = 0;
    int num_realpositive = 0;
    
    for(int i=0; i<result.getTweets().size(); i++){
        String tweet = result.getTweets().get(i).getText();
            String sentiment = findSentiment(tweet);
            if(sentiment.equalsIgnoreCase("Neutral")){
                num_neutral++;
            }
            else if(sentiment.equalsIgnoreCase("Negative")){
                num_negative++;
            }
            else if(sentiment.equalsIgnoreCase("Very Negative")){
                num_realnegative++;
            }
            else if(sentiment.equalsIgnoreCase("Very Positive")){
                num_realpositive++;
            }
            else{
                num_positive++;
            }       
    }
    
    System.out.println(num_neutral);
    System.out.println(num_negative);
    System.out.println(num_realnegative);
    System.out.println(num_realpositive);
    System.out.println(num_realnegative);
}

Suggested posts

3 bewährte Möglichkeiten, Ihre Schreibfähigkeiten zu verbessern

Die Vorteile des Schreibens und Strategien, die Ihnen dabei helfen

3 bewährte Möglichkeiten, Ihre Schreibfähigkeiten zu verbessern

Im Jahr 2022, mit der Veröffentlichung von GPT-3, scheinen Schreibfähigkeiten an Bedeutung zu verlieren. Mit KI können auch Menschen mit schlechten Schreibkenntnissen hochwertiges Personal hervorbringen.

Gefährliche Gespräche

Gefährliche Gespräche

Wenn wir auf diesem Planeten weiterhin erfolgreich sein wollen, müssen wir gefährliche Gespräche führen. Diejenigen, die das in Frage stellen, was wir getan haben, was wir tun und was wir derzeit weiterhin tun werden (oder planen).

Related posts

Die langsame Erosion: Enthüllung der Art und Weise, wie Menschen in ihrer Karriere verkümmern

Die langsame Erosion: Enthüllung der Art und Weise, wie Menschen in ihrer Karriere verkümmern

In der heutigen schnelllebigen und wettbewerbsintensiven Welt spielt die Karriere eine wichtige Rolle für das persönliche Wachstum, die finanzielle Stabilität und die allgemeine Lebenszufriedenheit. Viele Menschen befinden sich jedoch in einem unerbittlichen Kreislauf aus Stagnation und Unzufriedenheit, der ihr Berufsleben allmählich verkümmert.

Pronomen sind super gruselig

Es fällt mir plötzlich auf, wie so oft. Es ist wieder die Mitte. <Nein, nicht die im Pazifik, du Schlappschwanz, die auf dem Jahrmarkt> Jede Schlagzeile laut…..

Wie man den Planeten rettet und Geld verdient

Wie man den Planeten rettet und Geld verdient

Wie oft haben Sie ohne nachzudenken eine Plastikflasche, ein Glas, eine Aluminiumdose oder ein Öko-Energiepaket weggeworfen? Wie oft haben Sie sich gewünscht, dass Sie für das Recycling etwas zurückbekommen könnten? Wenn Sie wie die meisten Menschen sind, lautet die Antwort wahrscheinlich „vielfach“. Recycling wird oft als Ärger, lästige Pflicht oder Pflicht angesehen, die keinen unmittelbaren oder greifbaren Nutzen bringt.

Die „Learning at Work Week“ ist wichtiger als Sie denken

Die „Learning at Work Week“ ist wichtiger als Sie denken

Es fällt uns oft schwer, das umzusetzen, von dem wir wissen, dass es gut für uns ist. Von der Aussage, dass wir einen Lebensgefährten lieben, bis hin zur Erinnerung daran, wie ein Pirat zu reden – es wird immer diejenigen geben, die behaupten, dass ein Tag, eine Woche oder ein Monat voller Ereignisse nicht nötig sei, weil sie diese Dinge bereits tun.