Анализ тональности – это процесс определения того, является ли блок текста положительным, отрицательным или нейтральным. Это также известно как оценка мнений, когда нужно узнать мнение или отношение говорящего. Анализ настроений  – это контекстуальный поиск слов, который указывает на общественное мнение о бренде, а также помогает бизнесу определить, будет ли продукт, который они производят, пользоваться спросом на рынке или нет.

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

Например, если мы хотим проанализировать, удовлетворяет ли продукт требования клиентов, или есть ли потребность в этом продукте на рынке? Мы можем использовать анализ настроений, чтобы отслеживать отзывы об этом продукте. Анализ настроений также эффективно использовать, когда имеется большой набор неструктурированных данных, и мы хотим классифицировать эти данные, автоматически помечая их тегами. Опросы Net Promoter Score (NPS) широко используются для получения информации о том, как клиент воспринимает продукт или услуга. Анализ настроений также завоевал свою популярность благодаря возможности обрабатывать большие объемы ответов NPS и быстро получать согласованные результаты.

Зачем выполнять анализ настроений?

Согласно опросу, 80% мировых данных неструктурированы. Данные должны быть проанализированы и структурированы, будь то электронные письма, тексты, документы, статьи и многое другое.

  1. Анализ настроений необходим, поскольку он хранит данные в эффективном и экономичном формате.
  2. Анализ настроений решает проблемы в реальном времени и может помочь вам решить все сценарии в реальном времени.

Мы можем видеть, что анализ тональности пригодится в следующих реальных приложениях;

  • В области маркетинга (бизнеса) компании используют его для разработки своих стратегий, чтобы понять отношение клиентов к продуктам или брендам, как люди реагируют на их кампании или запуск продуктов и почему потребители не покупают некоторые продукты.
  • В политической сфере он используется для отслеживания политических взглядов, выявления непротиворечивости и несоответствия между заявлениями и действиями на уровне правительства. Его также можно использовать для прогнозирования результатов выборов!
  • В Public Actions анализ настроений также используется для мониторинга и анализа социальных явлений, выявления потенциально опасных ситуаций и определения общего настроения блогосферы.

Типы анализа настроений

  1. Детальный анализ тональности. Это зависит от полярности. Эта категория может быть оформлена как очень положительная, положительная, нейтральная, отрицательная, очень отрицательная. Оценка проводится по шкале от 1 до 5. Если оценка 5, то это очень положительно, 2 — отрицательно и 3 — нейтрально.
  2. Обнаружение эмоций. чувства счастья, грусти, гнева, расстроенности, радости, радости и т. д. подпадают под определение эмоций. Он также известен как лексический метод анализа настроений.
  3. Анализ тональности на основе аспектов. Он фокусируется на определенном аспекте, например, если человек хочет проверить функцию мобильного телефона, он проверяет такие аспекты, как батарея, экран, качество камеры, а затем на основе аспекта. используется.
  4. Многоязычный анализ настроений.Многоязычие состоит из разных языков, которые необходимо классифицировать как положительные, отрицательные и нейтральные. Это очень сложно и сравнительно сложно.

Как работает анализ настроений?

Используются три подхода:

  1. Подход, основанный на правилах. Здесь метод лексикона, токенизация и синтаксический анализ используются на основе правил. Подход заключается в том, что подсчитывается количество положительных и отрицательных слов в данном наборе данных. Если положительных слов больше, чем отрицательных, то настроение положительное, иначе наоборот.
  2. Автоматический подход. Этот подход основан на методе машинного обучения. Во-первых, наборы данных обучаются и выполняется прогнозный анализ. Следующий процесс — извлечение слов из текста. Это извлечение текста может быть выполнено с использованием различных методов, таких как Наивный Байес, Линейная регрессия, Опорный вектор, Глубокое обучение, например, используются методы машинного обучения.
  3. Гибридный подход. Это комбинация обоих вышеперечисленных подходов, т. е. основанного на правилах и автоматического подхода. Плюс в том, что точность выше по сравнению с двумя другими подходами.

Приложения

Анализ настроений имеет широкий спектр приложений, таких как:

  1. Социальные сети. Если, например, комментарии в социальных сетях, таких как Instagram, здесь все отзывы анализируются и классифицируются как положительные, отрицательные и нейтральные.
  2. Обслуживание клиентов. В магазине игр все комментарии в формате от 1 до 5 создаются с помощью методов анализа тональности.
  3. Сектор маркетинга: в области маркетинга, где определенный продукт должен оцениваться как хороший или плохой.
  4. Все рецензенты просмотрят комментарии, проверят и дадут общий отзыв о продукте.

Проблемы анализа настроений

Проблемы в подходе к анализу настроений включают:

  1. Если данные представлены в виде тона, то становится действительно трудно определить, является ли комментарий пессимистичным или оптимистичным.
  2. Если данные представлены в виде смайликов, вам нужно определить, хорошие они или плохие.
  3. Даже ироничные, саркастические, сравнивающие комментарии обнаружить действительно сложно.
  4. Сравнение нейтрального утверждения — большая задача.

Давайте проведем анализ настроений в твиттере с помощью Python. Вы можете выполнять анализ настроений по любой теме, анализируя твиты, полученные из Twitter, с помощью Python. Шаг 1 – установка:

#tweepy is a python client for the official twitter api.
pip install tweepy
#textblob is the python library for processing textual data. 
pip install textblob
#NLTK corpora is nothing but a large and structured set of texts.
python -m textblob.download_corpora

Шаг 2: Аутентификация:

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

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

Шаг 3 – Реализация:

import re
import tweepy
from tweepy import OAuthHandler
from textblob import TextBlob

class TwitterClient(object):
 '''
 Generic Twitter Class for sentiment analysis.
 '''
 def __init__(self):
  '''
  Class constructor or initialization method.
  '''
  # keys and tokens from the Twitter Dev Console
  consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXX'  Szx6H4G7s5Htniyc0JnKLuLSR
  consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'  gaKrr1i39ww9pDSr0NDt8u4QGDXZEJCF6BiucmNOGZ0QMva0M6
  access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'  942840711308701696-yiEaEYXOUlFkKbkcl8IsfOzsZ7jXKuc
  access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXX'  ElGQ4CKIqh8Ip55xaKLqf8tijrZTCCt2wiWNziafSEgOx

  # attempt authentication
  try:
   # create OAuthHandler object
   self.auth = OAuthHandler(consumer_key, consumer_secret)
   # set access token and secret
   self.auth.set_access_token(access_token, access_token_secret)
   # create tweepy API object to fetch tweets
   self.api = tweepy.API(self.auth)
  except:
   print("Error: Authentication Failed")

 def clean_tweet(self, tweet):
  '''
  Utility function to clean tweet text by removing links, special characters
  using simple regex statements.
  '''
  return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])
         |(\w+:\/\/\S+)", " ", tweet).split())

 def get_tweet_sentiment(self, tweet):
  '''
  Utility function to classify sentiment of passed tweet
  using textblob's sentiment method
  '''
  # create TextBlob object of passed tweet text
  analysis = TextBlob(self.clean_tweet(tweet))
  # set sentiment
  if analysis.sentiment.polarity > 0:
   return 'positive'
  elif analysis.sentiment.polarity == 0:
   return 'neutral'
  else:
   return 'negative'

 def get_tweets(self, query, count = 10):
  '''
  Main function to fetch tweets and parse them.
  '''
  # empty list to store parsed tweets
  tweets = []

  try:
   # call twitter api to fetch tweets
   fetched_tweets = self.api.search(q = query, count = count)

   # parsing tweets one by one
   for tweet in fetched_tweets:
    # empty dictionary to store required params of a tweet
    parsed_tweet = {}

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

    # appending parsed tweet to tweets list
    if tweet.retweet_count > 0:
     # if tweet has retweets, ensure that it is appended only once
     if parsed_tweet not in tweets:
      tweets.append(parsed_tweet)
    else:
     tweets.append(parsed_tweet)

   # return parsed tweets
   return tweets

  except tweepy.TweepError as e:
   # print error (if any)
   print("Error : " + str(e))

def main():
 # creating object of TwitterClient Class
 api = TwitterClient()
 # calling function to get tweets
 tweets = api.get_tweets(query = 'Donald Trump', count = 200)

 # picking positive tweets from tweets
 ptweets = [tweet for tweet in tweets if tweet['sentiment'] == 'positive']
 # percentage of positive tweets
 print("Positive tweets percentage: {} %".format(100*len(ptweets)/len(tweets)))
 # picking negative tweets from tweets
 ntweets = [tweet for tweet in tweets if tweet['sentiment'] == 'negative']
 # percentage of negative tweets
 print("Negative tweets percentage: {} %".format(100*len(ntweets)/len(tweets)))
 # percentage of neutral tweets
 print("Neutral tweets percentage: {} % \
  ".format(100*(len(tweets) -(len( ntweets )+len( ptweets)))/len(tweets)))

 # printing first 5 positive tweets
 print("\n\nPositive tweets:")
 for tweet in ptweets[:10]:
  print(tweet['text'])

 # printing first 5 negative tweets
 print("\n\nNegative tweets:")
 for tweet in ntweets[:10]:
  print(tweet['text'])

if __name__ == "__main__":
 # calling main function
 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, etc. all 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 either…
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

*Мы авторизовали клиент API Twitter, сделали запрос GET к API Twitter для получения твитов по определенному запросу и проанализировали твиты, классифицировав каждый твит как положительный, отрицательный или нейтральный.*

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

  • Прежде всего, мы создаем класс TwitterClient. Этот класс содержит все методы для взаимодействия с Twitter API и анализа твитов. Мы используем функцию __init__ для обработки аутентификации клиента API.
  • В функции get_tweets мы используем:
fetched_tweets = self.api.search(q = query, count = count)
  • для вызова Twitter API для получения твитов.
  • В get_tweet_sentiment мы используем модуль textblob.
analysis = TextBlob(self.clean_tweet(tweet))
  • TextBlob на самом деле является библиотекой высокого уровня, созданной поверх библиотеки NLTK. Сначала мы вызываем метод clean_tweet для удаления ссылок, специальных символов и т. д. из твита с помощью простого регулярного выражения. Затем, когда мы передаем tweet для создания объекта TextBlob, библиотека textblob выполняет следующую обработку текста:
  • Токенизировать твит, т.е. отделить слова от основного текста.
  • Удалите стоп-слова из токенов (стоп-слова — это часто используемые слова, которые не имеют значения при анализе текста, такие как я, есть, вы, есть и т. д.)
  • Выполните POS (часть речи) тегирование токенов и выберите только важные функции / токены, такие как прилагательные, наречия и т. д.
  • Передайте маркеры классификатору настроений, который классифицирует настроение твита как положительное, отрицательное или нейтральное, присваивая ему полярность от -1,0 до 1,0 .
  • TextBlob использует набор данных Movies Reviews, в котором отзывы уже помечены как положительные или отрицательные.
  • Положительные и отрицательные характеристики извлекаются из каждого положительного и отрицательного отзыва соответственно.
  • Данные обучения теперь состоят из помеченных положительных и отрицательных признаков. Эти данные обучаются на Наивном байесовском классификаторе.
  • Наконец, возвращаются проанализированные твиты. Затем мы можем выполнять различные типы статистического анализа твитов. Например, в приведенной выше программе мы пытались найти процент положительных, отрицательных и нейтральных твитов по запросу.

Таким образом, это то, что делает код. Надеюсь, это было полезно, если это была реакция аплодисментами, если это не комментарий о том, что я должен был сделать по-другому.