So erstellen Sie ein Tool zur Analyse der Twitter-Stimmung

Dieses Wochenende hatte ich etwas Zeit und beschloss, ein Tool zur Analyse der Twitter-Stimmung zu entwickeln.

Die Idee ist, dass Sie einen Suchbegriff eingeben und das Tool die letzten Tweets durchsucht. Anschließend wird anhand der Stimmungsanalyse ermittelt, wie positiv oder negativ Twitter zu diesem Thema ist.

Sie könnten beispielsweise nach "Donald Trump" suchen, um die Meinung von Twitter zum Präsidenten zu erfahren.

Lass uns eintauchen!

Erhalten eines Twitter-API-Schlüssels

Als erstes müssen wir eine Twitter-Anwendung erstellen, um einen API-Schlüssel zu erhalten.

Gehen Sie zur Seite mit den Twitter-Apps, um eine neue Anwendung zu erstellen. Sie müssen über ein Entwicklerkonto verfügen, um eine Anwendung erstellen zu können.

Wenn Sie kein Entwicklerkonto haben, können Sie eines beantragen. Die meisten Anfragen werden sofort gewährt. ?

Kopieren Sie das API Keyund das API Key Secret, das Sie in Ihrer Twitter-Anwendung finden.

Erstellen eines NodeJS-Projekts

Ich werde NodeJS verwenden, um diese Anwendung zu erstellen.

So erstellen Sie ein neues Projekt:

npm init npm install twitter-lite

Dadurch wird ein neues NodeJS-Projekt erstellt und das twitter-litePaket installiert . Dieses Paket macht die Interaktion mit der Twitter-API sehr einfach.

Zur Authentifizierung unserer Anfragen verwenden wir ein OAuth2.0-Inhaber-Token. Das twitter-litePaket bietet eine einfache Möglichkeit, die Twitter-Authentifizierung zu handhaben.

Erstellen wir eine neue index.jsDatei und fügen den folgenden Code hinzu:

const Twitter = require('twitter-lite'); const user = new Twitter({ consumer_key: "YOUR_API_KEY", consumer_secret: "YOUR_API_SECRET", }); // Wrap the following code in an async function that is called // immediately so that we can use "await" statements. (async function() { try { // Retrieve the bearer token from twitter. const response = await user.getBearerToken(); console.log(`Got the following Bearer token from Twitter: ${response.access_token}`); // Construct our API client with the bearer token. const app = new Twitter({ bearer_token: response.access_token, }); } catch(e) { console.log("There was an error calling the Twitter API."); console.dir(e); } })();

Wenn Sie dies ausführen, gibt die Konsole Folgendes aus:

Got the following Bearer token from Twitter: THE_TWITTER_BEARER_TOKEN

Super, soweit funktioniert alles. ?

Aktuelle Tweets abrufen

Der nächste Teil ist das Abrufen der letzten Tweets von der Twitter-API.

In der Twitter-Dokumentation sehen Sie, dass es einen Endpunkt für die Suche nach aktuellen Tweets gibt.

Um dies zu implementieren, füge ich der index.jsDatei den folgenden Code hinzu :

const Twitter = require('twitter-lite'); (async function() { const user = new Twitter({ consumer_key: "YOUR_API_KEY", consumer_secret: "YOUR_API_SECRET", }); try { let response = await user.getBearerToken(); const app = new Twitter({ bearer_token: response.access_token, }); // Search for recent tweets from the twitter API response = await app.get(`/search/tweets`, { q: "Lionel Messi", // The search term lang: "en", // Let's only get English tweets count: 100, // Limit the results to 100 tweets }); // Loop over all the tweets and print the text for (tweet of response.statuses) { console.dir(tweet.text); } } catch(e) { console.log("There was an error calling the Twitter API"); console.dir(e); } })();

Wenn Sie dies ausführen, können Sie viele Twitter-Kommentare zu Lionel Messi sehen, was bedeutet, dass es perfekt funktioniert! ⚽

"RT @TheFutbolPage: Some of Lionel Messi's best dribbles." "RT @MagufuliMugabe: Lionel Messi ? didn't just wake up one day and become the best player in the world no HE trained. So if your girl is…" ""RT @goal: The boy who would be King ? Is Ansu Fati the heir to Lionel Messi's throne?" and many more... 

Stimmungsanalyse durchführen

Um die Stimmungsanalyse durchzuführen, verwende ich die Natural Language API von Google Cloud. Mit dieser API können Sie die Stimmungsbewertung eines Textes mit einem einfachen API-Aufruf abrufen.

Wechseln Sie zunächst zur Google Cloud Console, um ein neues Cloud-Projekt zu erstellen.

Wechseln Sie als Nächstes zur API für natürliche Sprache und aktivieren Sie sie für das Projekt.

Schließlich müssen wir ein Dienstkonto erstellen, um uns zu authentifizieren. Gehen Sie zur Seite Dienstkonto erstellen, um ein Dienstkonto zu erstellen.

Wenn Sie ein Dienstkonto erstellen, müssen Sie die jsonDatei herunterladen , die den privaten Schlüssel dieses Dienstkontos enthält. Speichern Sie diese Datei im Projektordner.

Google hat ein NodeJS-Paket für die Interaktion mit der Natural Language API. So installieren Sie es:

npm install @google-cloud/language

Damit das Sprachpaket funktioniert, muss es wissen, wo sich die private Schlüsseldatei befindet.

Das Paket versucht, eine GOOGLE_APPLICATION_CREDENTIALSUmgebungsvariable zu lesen , die auf diese Datei verweisen soll.

Um diese Umgebungsvariable festzulegen, aktualisiere ich den scriptSchlüssel in der package.jsonDatei.

"scripts": { "start": "GOOGLE_APPLICATION_CREDENTIALS='./gcloud-private-key.json' node index.js" }

Beachten Sie, dass Sie das Skript starten müssen, damit dies funktioniert npm run start.

Mit all dem Setup können wir endlich mit dem Codieren beginnen.

Ich füge getSentimentder index.jsDatei eine neue Funktion hinzu :

const language = require('@google-cloud/language'); const languageClient = new language.LanguageServiceClient(); async function getSentiment(text) { const document = { content: text, type: 'PLAIN_TEXT', }; // Detects the sentiment of the text const [result] = await languageClient.analyzeSentiment({document: document}); const sentiment = result.documentSentiment; return sentiment.score; }

This function calls the Google Natural Language API and returns a sentiment score between -1 and 1.

Let's test it out with a few examples:

getSentiment("I HATE MESSI");

Returns the following.

The sentiment score is -0.40

Similarly:

getSentiment("I LOVE MESSI");

Returns a higher sentiment. ?

The sentiment score is 0.89

Bringing it all together

The final thing to do is calling the getSetiment function with the text from the tweets.

There is a catch though: only the first 5,000 API requests are free, after that Google will charge you for subsequent API requests.

To minimise the amount of API calls I'm going to combine all the tweets into one single string like so:

let allTweets = ""; for (tweet of response.statuses) { allTweets += tweet.text + "\n"; } const sentimentScore = await getSentimentScore(allTweets); console.log(`The sentiment about ${query} is: ${sentimentScore}`);

Now I only have to call the API once instead of 100 times.

The final question is of course: what does Twitter think about Lionel Messi? When running the program it gives the following output:

The sentiment about Lionel Messi is: 0.2

So, Twitter is lightly positive about Lionel Messi.

Conclusion

We've created a NodeJS program that interacts with the Twitter API to get recent tweets. It then sends these tweets to the Google Cloud Natural Language API to perform a sentiment analysis.

You can find a live version of this sentiment analysis here.

You can also view the completed code here on Github.