Как да изградим инструмент за анализ на настроенията в Twitter

Този уикенд имах известно време в ръцете си и реших да създам инструмент за анализ на настроенията в Twitter.

Идеята е, че въвеждате дума за търсене и инструментът ще търси скорошни туитове. След това ще използва анализ на настроенията, за да определи колко положителен или отрицателен е Twitter по въпроса.

Например, можете да търсите „Доналд Тръмп“, за да разберете настроението на Twitter за президента.

Да се ​​потопим!

Получаване на ключ за API на Twitter

Първото нещо, което трябва да направим, е да създадем Twitter приложение, за да получим API ключ.

Насочете се към страницата на приложенията в Twitter, за да създадете ново приложение. Трябва да имате акаунт на програмист, за да можете да създадете приложение.

Ако нямате акаунт на програмист, можете да кандидатствате за такъв. Повечето заявки се изпълняват незабавно. ?

Копирайте API Keyи API Key Secret, което намирате в приложението си в Twitter.

Създаване на проект NodeJS

Ще използвам NodeJS, за да създам това приложение.

За да създам нов проект, който стартирам:

npm init npm install twitter-lite

Това ще създаде нов проект NodeJS и ще инсталира twitter-liteпакета. Този пакет прави взаимодействието с Twitter API супер лесно.

За удостоверяване на нашите заявки ще използваме OAuth2.0 носителски маркер. В twitter-liteпакета има лесен начин за справяне с удостоверяването Twitter.

Нека създадем нов index.jsфайл и добавим следния код към него:

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

Когато се изпълнява това, конзолата извежда следното:

Got the following Bearer token from Twitter: THE_TWITTER_BEARER_TOKEN

Страхотно, засега всичко работи. ?

Получаване на скорошни туитове

Следващата част е извличане на скорошни туитове от Twitter API.

В документацията на Twitter можете да видите, че има крайна точка за търсене на скорошни туитове.

За да приложа това, добавям следния код към index.jsфайла:

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

Когато пускате това, можете да видите много коментари в Twitter за Лионел Меси, което означава, че работи перфектно! ⚽

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

Извършване на анализ на настроенията

За да извърша анализ на настроението, ще използвам API на Google Cloud за естествен език. С този API можете да получите оценката на настроението на текст с просто API извикване.

Първо се насочете към Google Cloud Console, за да създадете нов облачен проект.

След това преминете към API за естествен език и го активирайте за проекта.

И накрая, трябва да създадем акаунт за услуга, за да се удостоверяваме. Преминете към страницата за създаване на акаунт за услуга, за да създадете акаунт за услуга.

Когато създавате акаунт за услуга, ще трябва да изтеглите jsonфайла, съдържащ частния ключ на този акаунт за услуга. Съхранявайте този файл в папката на проекта.

Google има пакет NodeJS за взаимодействие с API за естествен език, така че нека използваме това. За да го инсталирате:

npm install @google-cloud/language

За да работи езиковият пакет, той трябва да знае къде е файлът с частния ключ.

Пакетът ще се опита да прочете GOOGLE_APPLICATION_CREDENTIALSпроменлива на средата, която трябва да сочи към този файл.

За да задам тази променлива на средата, актуализирам scriptключа във package.jsonфайла.

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

Имайте предвид, че за да работи това, трябва да стартирате скрипта, като стартирате npm run start.

С всичко, което е настроено, най-накрая можем да започнем кодирането.

Добавям нова getSentimentфункция към index.jsфайла:

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

Тази функция извиква API на Google Natural Language и връща оценка на настроението между -1 и 1.

Нека го изпробваме с няколко примера:

getSentiment("I HATE MESSI");

Връща следното.

The sentiment score is -0.40

По същия начин:

getSentiment("I LOVE MESSI");

Връща по-високо настроение. ?

The sentiment score is 0.89

Събиране на всичко

Последното нещо, което трябва да направите, е да извикате getSetimentфункцията с текста от туитовете.

Има обаче уловка: само първите 5000 заявки за API са безплатни, след което Google ще ви таксува за последващи заявки за API.

За да сведе до минимум количеството извиквания на API, ще комбинирам всички туитове в един единствен низ по следния начин:

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

Сега трябва само да извикам API веднъж, вместо 100 пъти.

Последният въпрос е разбира се: какво мисли Twitter за Лионел Меси? При стартиране на програмата тя дава следния изход:

The sentiment about Lionel Messi is: 0.2

Така че Twitter е леко позитивен за Лионел Меси.

Заключение

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.