Menganalisis Sentimen Tweet Dengan Java

Sebuah primer untuk NLP dengan Java

Foto oleh Hitesh Choudhary di Unsplash

Untuk tugas akhir saya untuk kursus Java Tingkat Lanjut yang saya ambil di sekolah, saya memutuskan untuk menggabungkan minat saya pada Pembelajaran Mesin dengan Java dan membuat proyek Pemrosesan Bahasa Alami. Salah satu proyek Pemrosesan Bahasa Alami yang paling dasar adalah menganalisis analisis sentimen dari tweet di Twitter. Jadi tentu saja, saya mencoba menganalisis sentimen tweet dengan kata-kata "Tanggapan Coronavirus AS."

Memperoleh Data.

Di awal proyek Machine Learning apa pun, hal pertama yang perlu Anda lakukan adalah mendapatkan data. Untuk mendapatkan tweet, Anda perlu melakukan analisis, Anda perlu mengakses API Twitter. Python memiliki banyak perpustakaan untuk melakukan ini, seperti Tweepy. Namun, kami menggunakan Java yang tidak memiliki paket sebanyak Python, tetapi memiliki paket API Twitter hebat yang dapat kami gunakan untuk mendapatkan data: twitter4j . Pertama, Anda harus menginstal paket, saya sarankan menggunakan Maven sebagai manajer build Anda untuk proyek tersebut. Jadi untuk menambahkan perpustakaan twitter4j ke proyek Java Anda, tambahkan ini ke kehidupan pom.xml Anda.

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

Inilah kode yang Anda butuhkan untuk mengikis data. Jadikan ini sebagai file Main.java Anda.

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

Membangun kelas Penganalisis Sentimen

Untuk membangun kelas Penganalisis Sentimen kami, kami akan menggunakan paket coreNLP Standford. Untuk menambahkan paket ini ke proyek Anda, tambahkan ketergantungan berikut ke file pom.xml Anda.

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

Menyatukan Semuanya

Kita akan meletakkan semuanya bersama-sama di file Main.java. Berikut kodenya:

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

Revolusi Tempat Kerja: Para Ahli Teratas Membahas Kerja Hibrid dan Jarak Jauh

Revolusi Tempat Kerja: Para Ahli Teratas Membahas Kerja Hibrid dan Jarak Jauh

Dalam lanskap bisnis yang berkembang pesat saat ini, konsep kerja hibrid dan jarak jauh telah mendapatkan momentum yang belum pernah terjadi sebelumnya. Saat perusahaan terus beradaptasi dengan perubahan kebutuhan dan harapan karyawan mereka, para ahli dari berbagai bidang berkumpul untuk membahas manfaat, tantangan, dan masa depan cara kerja transformatif ini.

Apakah Seni Pernah Apolitis?

Apakah Seni Pernah Apolitis?

Kemarin kami menutup pintu pada Kontes Lagu Eurovision tahun ini dengan grand final yang gemerlap dan kacau di mana penyanyi Swedia Loreen membawa pulang trofi, menjadi wanita pertama yang menang dua kali dan membawa mahkota kembali ke Swedia 50 tahun setelah ABBA memenangkan kompetisi dengan "Waterloo". Mereka kemudian menjadi salah satu aksi terbesar dalam kanon musik pop.

Related posts

Tantangan Membaca Goodreads Beracun

Tantangan Membaca Goodreads Beracun

Gatal di tangan saya menyebar saat saya menawar dengan penjual buku lokal untuk buku lain. Buku ini seperti buku lain yang saya beli baru-baru ini akan menemukan singgasananya di tumpukan 'To Be Read' (TBR) saya; namun, saya membelinya.

Arsip Ancaman Itu: Vol 7 Black Basta

Arsip Ancaman Itu: Vol 7 Black Basta

Di dunia yang saling terhubung saat ini, ancaman serangan dunia maya lebih umum dari sebelumnya. Penjahat dunia maya dan aktor negara terus-menerus berusaha mengeksploitasi kerentanan dan mencuri data berharga, yang menimbulkan risiko signifikan bagi organisasi dari semua ukuran.

Mendanai penghapusan karbon di FY24

Rincian permintaan alokasi Carbon180 di seluruh jalur

Mendanai penghapusan karbon di FY24

Oleh Alyson Lee, penasihat urusan pemerintah yang mengelola Proses alokasi tahunan pemerintah federal merupakan inti dari upaya kami untuk mendanai penghilangan karbon dioksida (CDR). Setiap tahun, Carbon180 mengajukan permintaan ke berbagai kantor kongres untuk membantu mengarahkan ke mana dolar tahun depan akan mengalir.

Dua tahun dalam desain- Yang baik, buruk, dan jelek…

Dua tahun dalam desain- Yang baik, buruk, dan jelek…

“Hai Siri, mainkan Me Dive oleh Olivia Dean.” Saat itu Mei 2021 ketika saya memulai magang di Future Academy Africa di Akure, Nigeria.