Рубрики

Анализ настроений в Twitter с использованием Python

Эта статья посвящена анализу настроений по любой теме путем анализа твитов, полученных из Twitter с использованием Python.

Что такое анализ настроений?
Анализ настроений — это процесс «компьютерного» определения, является ли фрагмент письма положительным, отрицательным или нейтральным. Это также известно как анализ мнений , получение мнения или позиции оратора.

Почему анализ настроений?

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

Установка:

  • Tweepy: tweepy — клиент Python для официального API Twitter .
    Установите его, используя следующую команду pip:
    pip install tweepy
  • TextBlob: textblob — это библиотека python для обработки текстовых данных.
    Установите его, используя следующую команду pip:
    pip install textblob

    Также нам нужно установить несколько корпусов NLTK, используя следующую команду:

    python -m textblob.download_corpora

    (Корпора — это не что иное, как большой и структурированный набор текстов.)

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

  • Откройте эту ссылку и нажмите кнопку «Создать новое приложение»
  • Заполните данные заявки. Вы можете оставить поле URL обратного вызова пустым.
  • Как только приложение будет создано, вы будете перенаправлены на страницу приложения.
  • Откройте вкладку «Ключи и токены доступа».
  • Скопируйте «Ключ потребителя», «Секрет потребителя», «Токен доступа» и «Секрет токена доступа».

Реализация:

import re

import tweepy

from tweepy import OAuthHandler

from textblob import TextBlob

  

class TwitterClient(object):

    «»»

    Общий Twitter-класс для анализа настроений.

    «»»

    def __init__(self):

        «»»

        Конструктор класса или метод инициализации.

        «»»

        # ключи и токены из консоли разработчика Twitter

        consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXX'

        consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'

        access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'

        access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXX'

  

        # попытка аутентификации

        try:

            # создать объект OAuthHandler

            self.auth = OAuthHandler(consumer_key, consumer_secret)

            # установить токен доступа и секрет

            self.auth.set_access_token(access_token, access_token_secret)

            # создать tweepy API-объект для получения твитов

            self.api = tweepy.API(self.auth)

        except:

            print("Error: Authentication Failed")

  

    def clean_tweet(self, tweet):

        «»»

        Утилита для очистки текста в твиттере путем удаления ссылок, специальных символов

        используя простые выражения регулярных выражений.

        «»»

        return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])

                                    |(\w+:\/\/\S+)", " ", tweet).split())

  

    def get_tweet_sentiment(self, tweet):

        «»»

        Функция полезности для классификации настроений прошедшего твита

        используя метод настроения textblob

        «»»

        # создать объект TextBlob переданного текста твита

        analysis = TextBlob(self.clean_tweet(tweet))

        # установить настроение

        if analysis.sentiment.polarity > 0:

            return 'positive'

        elif analysis.sentiment.polarity == 0:

            return 'neutral'

        else:

            return 'negative'

  

    def get_tweets(self, query, count = 10):

        «»»

        Основная функция для получения твитов и их анализа.

        «»»

        # пустой список для хранения проанализированных твитов

        tweets = []

  

        try:

            # вызвать твиттер api для получения твитов

            fetched_tweets = self.api.search(q = query, count = count)

  

            # парсит твиты один за другим

            for tweet in fetched_tweets:

                # пустой словарь для хранения обязательных параметров твита

                parsed_tweet = {}

  

                # сохранение текста твита

                parsed_tweet['text'] = tweet.text

                # сохранение настроения твита

                parsed_tweet['sentiment'] = self.get_tweet_sentiment(tweet.text)

  

                # добавление проанализированного твита в список твитов

                if tweet.retweet_count > 0:

                    # если твит имеет ретвиты, убедитесь, что он добавлен только один раз

                    if parsed_tweet not in tweets:

                        tweets.append(parsed_tweet)

                else:

                    tweets.append(parsed_tweet)

  

            # вернуть проанализированные твиты

            return tweets

  

        except tweepy.TweepError as e:

            # ошибка печати (если есть)

            print("Error : " + str(e))

  

def main():

    # создание объекта класса TwitterClient

    api = TwitterClient()

    # вызов функции для получения твитов

    tweets = api.get_tweets(query = 'Donald Trump', count = 200)

  

    # выбор положительных твитов из твитов

    ptweets = == 'positive']

    # процент положительных твитов

    print("Positive tweets percentage: {} %".format(100*len(ptweets)/len(tweets)))

    # выбор отрицательных твитов из твитов

    ntweets = == 'negative']

    # процент отрицательных твитов

    print("Negative tweets percentage: {} %".format(100*len(ntweets)/len(tweets)))

    # процент нейтральных твитов

    print("Neutral tweets percentage: {} % \

        ".format(100*len(tweets - ntweets - ptweets)/len(tweets)))

  

    # печать первых 5 положительных твитов

    print("\n\nPositive tweets:")

    for tweet in ptweets[:10]:

        print(tweet['text'])

  

    # печать первых 5 отрицательных твитов

    print("\n\nNegative tweets:")

    for tweet in ntweets[:10]:

        print(tweet['text'])

  

if __name__ == "__main__":

    # вызов основной функции

    main()

Вот как выглядит пример вывода при запуске вышеуказанной программы:

Positive tweets percentage: 22 %
Negative tweets percentage: 15 %


Positive tweets:
RT @JohnGGalt: Amazing—after years of attacking Donald Trump the media managed
to turn #InaugurationDay into all about themselves.
#MakeAme…
RT @vooda1: CNN Declines to Air White House Press Conference Live YES! 
THANK YOU @CNN FOR NOT LEGITIMI…
RT @Muheeb_Shawwa: Donald J. Trump's speech sounded eerily familiar...
POTUS plans new deal for UK as Theresa May to be first foreign leader to meet new 
president since inauguration 
.@realdonaldtrump #Syria #Mexico #Russia & now #Afghanistan. 
Another #DearDonaldTrump Letter worth a read @AJEnglish 


Negative tweets:
RT @Slate: Donald Trump’s administration: “Government by the worst men.” 
RT @RVAwonk: Trump, Sean Spicer, et al. lie for a reason. 
Their lies are not just lies. Their lies are authoritarian propaganda.  
RT @KomptonMusic: Me: I hate corn 
Donald Trump: I hate corn too
Me: https://t.co/GPgy8R8HB5
It's ridiculous that people are more annoyed at this than Donald Trump's sexism.
RT @tony_broach: Chris Wallace on Fox news right now talking crap 
about Donald Trump news conference it seems he can't face the truth eithe…
RT @fravel: With False Claims, Donald Trump Attacks Media on Crowd Turnout 
Aziz Ansari Just Hit Donald Trump Hard In An Epic Saturday NIght Live Monologue

Мы следуем этим 3 основным шагам в нашей программе:

  • Авторизовать клиент Twitter API.
  • Сделайте запрос GET к Twitter API, чтобы получить твиты для определенного запроса.
  • Разобрать твиты. Классифицируйте каждый твит как положительный, отрицательный или нейтральный.

Теперь давайте попробуем разобраться в приведенном выше фрагменте кода:

  • Прежде всего, мы создаем класс TwitterClient . Этот класс содержит все методы для взаимодействия с Twitter API и анализа твитов. Мы используем функцию __init__ для обработки аутентификации клиента API.
  • В функции get_tweets мы используем:
    fetched_tweets = self.api.search(q = query, count = count)

    вызвать API Twitter для получения твитов.

  • В get_tweet_sentiment мы используем модуль textblob.
    analysis = TextBlob(self.clean_tweet(tweet))

    TextBlob — это библиотека высокого уровня, построенная поверх библиотеки NLTK . Сначала мы вызываем метод clean_tweet, чтобы удалить ссылки, специальные символы и т. Д. Из твита, используя некоторое простое регулярное выражение.
    Затем, когда мы передаем твит для создания объекта TextBlob , следующая обработка выполняется над текстом библиотекой textblob:

    • Токенизировать твит, то есть разделять слова по тексту.
    • Удалите стоп-слова из токенов (стоп-слова — это часто используемые слова, которые не имеют отношения к анализу текста, такие как я, я, вы, и т. Д.)
    • Выполните POS (часть речи) маркировку токенов и выберите только важные признаки / токены, такие как прилагательные, наречия и т. Д.
    • Передайте токены классификатору настроений, который классифицирует настроение в твите как положительное, отрицательное или нейтральное, назначив ему полярность от -1,0 до 1,0.

    Вот как создается классификатор настроений :

    • TextBlob использует набор данных Обзоры фильмов, в которых отзывы уже помечены как положительные или отрицательные.
    • Положительные и отрицательные характеристики извлекаются из каждого положительного и отрицательного отзыва соответственно.
    • Данные обучения теперь состоят из помеченных положительных и отрицательных признаков. Эти данные обучены наивному байесовскому классификатору .

    Затем мы используем sentiment.polarity метод класса TextBlob получить полярность твит от -1 до 1.
    Затем мы классифицируем полярность как:

    if analysis.sentiment.polarity > 0:
           return 'positive'
    elif analysis.sentiment.polarity == 0:
           return 'neutral'
    else:
           return 'negative'
  • Наконец, проанализированные твиты возвращаются. Затем мы можем делать различные виды статистического анализа твитов. Например, в приведенной выше программе мы пытались найти процент положительных, отрицательных и нейтральных твитов о запросе.

Ссылки:

Эта статья предоставлена Нихилом Кумаром . Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя contrib.geeksforgeeks.org, или отправить свою статью на электронный адрес contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Рекомендуемые посты:

Анализ настроений в Twitter с использованием Python

0.00 (0%) 0 votes