Анализ тональности – это процесс определения того, является ли блок текста положительным, отрицательным или нейтральным. Это также известно как оценка мнений, когда нужно узнать мнение или отношение говорящего. Анализ настроений – это контекстуальный поиск слов, который указывает на общественное мнение о бренде, а также помогает бизнесу определить, будет ли продукт, который они производят, пользоваться спросом на рынке или нет.
Цель, которую пытается достичь анализ настроений, состоит в том, чтобы проанализировать мнение людей таким образом, чтобы это могло помочь бизнесу расширяться. Он фокусируется не только на полярности (положительной, отрицательной и нейтральной), но и на эмоциях (счастливых, грустных, злых и т. д.). Он использует различные алгоритмы обработки естественного языка, такие как основанный на правилах, автоматический и гибридный.
Например, если мы хотим проанализировать, удовлетворяет ли продукт требования клиентов, или есть ли потребность в этом продукте на рынке? Мы можем использовать анализ настроений, чтобы отслеживать отзывы об этом продукте. Анализ настроений также эффективно использовать, когда имеется большой набор неструктурированных данных, и мы хотим классифицировать эти данные, автоматически помечая их тегами. Опросы Net Promoter Score (NPS) широко используются для получения информации о том, как клиент воспринимает продукт или услуга. Анализ настроений также завоевал свою популярность благодаря возможности обрабатывать большие объемы ответов NPS и быстро получать согласованные результаты.
Зачем выполнять анализ настроений?
Согласно опросу, 80% мировых данных неструктурированы. Данные должны быть проанализированы и структурированы, будь то электронные письма, тексты, документы, статьи и многое другое.
- Анализ настроений необходим, поскольку он хранит данные в эффективном и экономичном формате.
- Анализ настроений решает проблемы в реальном времени и может помочь вам решить все сценарии в реальном времени.
Мы можем видеть, что анализ тональности пригодится в следующих реальных приложениях;
- В области маркетинга (бизнеса) компании используют его для разработки своих стратегий, чтобы понять отношение клиентов к продуктам или брендам, как люди реагируют на их кампании или запуск продуктов и почему потребители не покупают некоторые продукты.
- В политической сфере он используется для отслеживания политических взглядов, выявления непротиворечивости и несоответствия между заявлениями и действиями на уровне правительства. Его также можно использовать для прогнозирования результатов выборов!
- В Public Actions анализ настроений также используется для мониторинга и анализа социальных явлений, выявления потенциально опасных ситуаций и определения общего настроения блогосферы.
Типы анализа настроений
- Детальный анализ тональности. Это зависит от полярности. Эта категория может быть оформлена как очень положительная, положительная, нейтральная, отрицательная, очень отрицательная. Оценка проводится по шкале от 1 до 5. Если оценка 5, то это очень положительно, 2 — отрицательно и 3 — нейтрально.
- Обнаружение эмоций. чувства счастья, грусти, гнева, расстроенности, радости, радости и т. д. подпадают под определение эмоций. Он также известен как лексический метод анализа настроений.
- Анализ тональности на основе аспектов. Он фокусируется на определенном аспекте, например, если человек хочет проверить функцию мобильного телефона, он проверяет такие аспекты, как батарея, экран, качество камеры, а затем на основе аспекта. используется.
- Многоязычный анализ настроений.Многоязычие состоит из разных языков, которые необходимо классифицировать как положительные, отрицательные и нейтральные. Это очень сложно и сравнительно сложно.
Как работает анализ настроений?
Используются три подхода:
- Подход, основанный на правилах. Здесь метод лексикона, токенизация и синтаксический анализ используются на основе правил. Подход заключается в том, что подсчитывается количество положительных и отрицательных слов в данном наборе данных. Если положительных слов больше, чем отрицательных, то настроение положительное, иначе наоборот.
- Автоматический подход. Этот подход основан на методе машинного обучения. Во-первых, наборы данных обучаются и выполняется прогнозный анализ. Следующий процесс — извлечение слов из текста. Это извлечение текста может быть выполнено с использованием различных методов, таких как Наивный Байес, Линейная регрессия, Опорный вектор, Глубокое обучение, например, используются методы машинного обучения.
- Гибридный подход. Это комбинация обоих вышеперечисленных подходов, т. е. основанного на правилах и автоматического подхода. Плюс в том, что точность выше по сравнению с двумя другими подходами.
Приложения
Анализ настроений имеет широкий спектр приложений, таких как:
- Социальные сети. Если, например, комментарии в социальных сетях, таких как Instagram, здесь все отзывы анализируются и классифицируются как положительные, отрицательные и нейтральные.
- Обслуживание клиентов. В магазине игр все комментарии в формате от 1 до 5 создаются с помощью методов анализа тональности.
- Сектор маркетинга: в области маркетинга, где определенный продукт должен оцениваться как хороший или плохой.
- Все рецензенты просмотрят комментарии, проверят и дадут общий отзыв о продукте.
Проблемы анализа настроений
Проблемы в подходе к анализу настроений включают:
- Если данные представлены в виде тона, то становится действительно трудно определить, является ли комментарий пессимистичным или оптимистичным.
- Если данные представлены в виде смайликов, вам нужно определить, хорошие они или плохие.
- Даже ироничные, саркастические, сравнивающие комментарии обнаружить действительно сложно.
- Сравнение нейтрального утверждения — большая задача.
Давайте проведем анализ настроений в твиттере с помощью 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, в котором отзывы уже помечены как положительные или отрицательные.
- Положительные и отрицательные характеристики извлекаются из каждого положительного и отрицательного отзыва соответственно.
- Данные обучения теперь состоят из помеченных положительных и отрицательных признаков. Эти данные обучаются на Наивном байесовском классификаторе.
- Наконец, возвращаются проанализированные твиты. Затем мы можем выполнять различные типы статистического анализа твитов. Например, в приведенной выше программе мы пытались найти процент положительных, отрицательных и нейтральных твитов по запросу.
Таким образом, это то, что делает код. Надеюсь, это было полезно, если это была реакция аплодисментами, если это не комментарий о том, что я должен был сделать по-другому.