Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair

RedDeveloper
06.04.2022 20:06
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair

Python, Tweepy и Flair для анализа настроения

Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать алгоритм, обучить модель и справиться со всеми проблемами, которые с этим связаны.

Я прошел через это и стараюсь выбирать легкий путь, когда это возможно. В случае с анализом настроений работа уже проделана. Нет необходимости изобретать велосипед.

Мы будем использовать только две библиотеки:

Flair - это NLP-фреймворк, разработанный Берлинским университетом Гумбольдта. У них есть модели, обученные на данных социальных сетей, что идеально подходит для нашего использования.

Tweepy - это библиотека Python с открытым исходным кодом для доступа к APITwitter.

Установка

Чтобы начать работу над проектом, нам понадобится установить несколько библиотек:

pip install tweepypip
install flair

Установка Flair займет некоторое время, это довольно большая библиотека. Пока она устанавливается, перейдите на платформу разработчиков Twitter и зарегистрируйте аккаунт.

Как только вы зарегистрируетесь, откройте портал для разработчиков, создайте новый проект и нажмите на значок ключа рядом с ним, чтобы получить ключи API и маркеры аутентификации.

Портал разработчика
Портал разработчика

Мы будем использовать только конечные точки версии 1.1, поэтому нет необходимости беспокоиться о получении доступа к версии 2 или какого-либо повышенного доступа. Подойдет самая базовая учетная запись.

Для этого проекта вам понадобятся четыре ключа, они будут обозначены:

  • API Key
  • секрет API
  • Токен доступа
  • Секрет доступа
Страница ключей и токенов
Страница ключей и токенов

Как только вы сохраните их где-нибудь, наша настройка будет завершена. Мы можем погрузиться в файл Python и начать собирать все вместе.

Получение твитов

Настройка обработчика API

Для начала убедимся, что мы можем получать твиты из API Twitter. Давайте импортируем tweepy и установим ключи и токены, которые мы создали:

import tweepy
API_Key = 'Ваш ключ API'
API_Secret = 'Ваш секрет API'
Access_Token = 'Ваш токен доступа'
Accesss_Secret = 'Ваш секрет доступа'

Хорошо, теперь, когда мы установили наши переменные, давайте настроим обработчик API. Для этого мы можем использовать класс OAuthHandler от tweepy:

auth = tweepy.OAuthHandler(API_Key, Secret_Key).

С этим новым объектом auth мы хотим использовать метод set_access_token, чтобы установить наши маркеры доступа:

auth.set_access_token(Access_Token, Access_Secret)

Наконец, мы можем завершить настройку обработчика API, создав класс API tweepy с использованием этого объекта auth:

api = tweepy.API(auth)

Давайте посмотрим, как должен выглядеть наш код на этом этапе:

Установка обработчика API
Установка обработчика API

Поиск твитов

API Twitter довольно надежен, существует множество способов собрать твиты от определенных пользователей, подписчиков и т.д. В этом примере мы будем просто искать твиты. Это работает так же, как и использование функции поиска в Twitter.

Поиск в Twitter
Поиск в Twitter

Для поиска твитов мы будем использовать метод search_tweets нашего api объекта. Он принимает несколько различных аргументов, но мы просто зададим запрос, язык, количество и режим tweet_mode:

tweets_data = api.search_tweets(
q = 'test -RT'
, lang = 'en'
, count = 10,
tweet_mode = 'extended'
)

Если вы заметили, что в нашем запросе есть "-RT", это означает исключение ретвитов. Это просто немного упрощает работу.

Это должно быть все, что вам нужно для поиска твитов. Просто распечатайте данные tweets_data, чтобы убедиться, что все работает.

Данные твитов распечатаны
Данные твитов распечатаны

Вы должны получить большой список всех видов данных. API Twitter отправит все, включая все виды информации, которую мы не будем использовать.

Если вы не получили этого, скорее всего, произошла ошибка аутентификации:

Ошибка аутентификации
Ошибка аутентификации

Это означает, что у вас проблемы с ключами и токенами. Убедитесь, что они находятся в нужном месте. Если это так, попробуйте их перегенерировать, поскольку при их копировании, скорее всего, произошла ошибка.

Получение нужных данных твитов

Теперь, когда у нас есть куча напечатанных данных, нам нужно сократить их до нужных нам данных. Пока что мы просто возьмем текст, по которому будет работать sentiment.

Мы можем сделать это довольно легко. Наш поиск твитов выводит список твитов, и мы можем использовать атрибут в модели tweepy, чтобы получить текст:

tweet_text = [tweet.full_text for tweet in tweets_data].

Это выведет только текст, связанный с твитом. Если мы выведем tweet_text, то получим список твитов (в виде строк):

Тексты твитов
Тексты твитов

Отсюда мы можем начать анализ настроения этих твитов.

Анализ настроения

Flair - довольно большая библиотека. Есть только несколько частей библиотеки, которые мы будем использовать, поэтому мы укажем эти импорты, чтобы сделать наш код как можно более читабельным:

from flair.models import TextClassifierfrom
flair.data import Sentence

Первое, что нам нужно сделать с помощью flair, это настроить наш классификатор:

classifier = TextClassifier.load('sentiment')

Далее мы настроим предложения, которые будут использоваться для анализа:

tweet_sent = [Sentence(tweet) for tweet in tweets].

Наконец, мы будем использовать классификатор для предсказания настроения каждого твита:

classifier.predict(tweet_sent, mini_batch_size=32)

Итак, чтобы подвести итог, на каком этапе мы находимся в нашей программе, вот скриншот с распечаткой твитов:

Распечатанные предложения
Распечатанные предложения

Как вы можете видеть, Flair выдает нам токенизированное предложение. Однако на самом деле нам нужны метки. Давайте выделим только метки "ПОЗИТИВ" и "НЕГАТИВ":

tweet_sent = [sent.labels[0].value for sent in tweet_sent].

Теперь мы получим распечатку только меток, присвоенных твиту:

Вывод результатов оценки
Вывод результатов оценки

Теперь у нас есть твиты и анализ настроения. Мы можем просто объединить текст с настроением.

analyzed_tweets = list(zip(tweet_text, sent_values))

Распечатав эти данные, мы можем увидеть, какие твиты оцениваются положительно, а какие отрицательно.

Результаты оценки твитов
Результаты оценки твитов

Заключение

Итак, мы рассмотрели много вопросов:

  • Сгенерировали ключи API и маркеры авторизации для Twitter
  • использовали tweepy для сбора твитов
  • Использовали Flair для анализа отправленных сообщений

Еще одна проверка того, сколько кода это заняло:

Итоговый код
Итоговый код

Всего 33 строки кода. Это невероятно лаконичная программа.

Это лишь малая часть того, что могут сделать tweepy и Flair. Вы можете создать приложения для анализа настроения ответов на твиты, отслеживания настроения пользователей по теме или даже анализа настроения в реальном времени с помощью потоковых твитов!

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML

15.07.2022 14:37

Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно является внешний метод. Это помогает сохранить код незагроможденным и организованным. Однако ситуация может диктовать использование двух других методов....

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly

16.05.2022 21:25

Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату, категорию, пол, местоположение, рейтинг, должность, страну, штат и т.д... и даже после заполнения всех этих данных вам будет предложена капча, которую...

Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)

18.04.2022 13:17

Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно использовать выбранный нами фреймворк, и он становится основным подходом к каждому новому продукту. Однако существует и другой подход к разработке. Вы...

Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React

13.04.2022 15:26

Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей. Первое, что вам нужно сделать, это установить гем Flatpickr через npm. Вы можете найти эту информацию на их сайте или просто использовать следующий код:

В чем разница между Promise и Observable?
В чем разница между Promise и Observable?

11.04.2022 20:00

Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса

08.04.2022 19:39

Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.