Analyser le sentiment des tweets avec Java

Une introduction à la PNL avec Java

Photo de Hitesh Choudhary sur Unsplash

Pour mon projet de fin d'études pour un cours Java avancé que je suivais à l'école, j'ai décidé de combiner mon intérêt pour l'apprentissage automatique avec Java et de faire un projet de traitement du langage naturel. L'un des projets de traitement du langage naturel les plus élémentaires consiste à analyser l'analyse des sentiments des tweets sur Twitter. Alors naturellement, j'ai tenté d'analyser les sentiments des tweets avec les mots "USA Coronavirus Response".

Obtention des données.

Au début de tout projet de Machine Learning, la première chose à faire est d'obtenir des données. Pour obtenir les tweets dont vous aurez besoin pour faire votre analyse, vous allez devoir accéder à l'API Twitter. Python a une tonne de bibliothèques pour faire cela, comme Tweepy. Cependant, nous utilisons Java qui n'a pas autant de packages que Python, mais il a un excellent package d'API Twitter que nous pouvons utiliser pour obtenir des données : twitter4j . Tout d'abord, vous devez installer le package, je vous recommande d'utiliser Maven comme gestionnaire de build pour le projet. Donc, pour ajouter la bibliothèque twitter4j à votre projet Java, ajoutez ceci à votre vie pom.xml.

<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>

Voici le code dont vous avez besoin pour récupérer les données. Faites-en votre fichier Main.java.

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);
}

Construire la classe Sentiment Analyzer

Pour construire notre classe Sentiment Analyzer, nous allons utiliser le package Standford coreNLP. Pour ajouter ce package à votre projet, ajoutez la dépendance suivante à votre fichier pom.xml.

<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
    }
​
}

Mettre tous ensemble

Nous allons tout mettre ensemble dans le fichier Main.java. Voici le 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

Qu'est-ce qui rend un podcast influent ?

Qu'est-ce qui rend un podcast influent&nbsp;?

La semaine dernière, j'ai remarqué un communiqué de presse, envoyé via PressGazette (un site Web d'information britannique). L'article annonçait qu'Acast, la société d'hébergement et de publicité de podcasts de Scandi, dirigerait un consortium d'éditeurs "probablement les plus influents" du podcasting.

La persécution des chrétiens : le crime de haine dont nous ne parlons pas

Oubliez l'islamophobie : les chrétiens (et les juifs) sont les principales victimes des crimes de haine religieuse.

La persécution des chrétiens&nbsp;: le crime de haine dont nous ne parlons pas

Tout esprit rationnel sait que les milieux politiques et médiatiques sont dominés par la gauche, voire l'extrême gauche, un état de fait qui crée un déséquilibre dans le discours politique. Dans le domaine religieux, ce déséquilibre est bien visible : les journaux et les réseaux de gauche ne se précipitent pas pour défendre la foi chrétienne.

Related posts

Deux ans en design - Le bon, le mauvais et le laid…

Deux ans en design - Le bon, le mauvais et le laid…

"Hey Siri, joue Me Dive d'Olivia Dean." C'était en mai 2021 lorsque j'ai commencé mon stage à la Future Academy Africa à Akure, au Nigeria.

Journal ouvert

Journal ouvert

Journal ouvert : une image par jour. J'ai toujours été fasciné par les histoires.

Comment sauver la planète et gagner de l'argent

Comment sauver la planète et gagner de l'argent

Combien de fois avez-vous jeté une bouteille en plastique, un bocal en verre, une canette en aluminium ou un paquet d'énergie verte sans réfléchir à deux fois ? Combien de fois avez-vous souhaité pouvoir obtenir quelque chose en échange de leur recyclage ? Si vous êtes comme la plupart des gens, la réponse est probablement plusieurs fois. Le recyclage est souvent perçu comme un tracas, une corvée ou un devoir qui n'apporte aucun bénéfice immédiat ou tangible.

Conversations dangereuses

Conversations dangereuses

Si nous voulons continuer à prospérer sur cette planète, nous allons devoir avoir des conversations dangereuses. Celles qui remettent en question ce que nous avons fait, ce que nous faisons et ce que nous sommes actuellement sur le point de continuer à faire (ou prévoyons de faire).