Анализ настроения постов в 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. Вы можете создать приложения для анализа настроения ответов на твиты, отслеживания настроения пользователей по теме или даже анализа настроения в реальном времени с помощью потоковых твитов!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.