Анализ настроения позволяет количественно оценить субъективность и полярность текста — отзыва, комментария и т. п.
Субъективность оценивает фразу между фактом и мнением, а полярность — от негативного до позитивного контекста.
В этой статье я покажу вам, как использовать этот метод для оценки отзывов TripAdvisor, подчеркивая реальную пользу для бизнеса, которую он может принести.
Для проведения такого анализа английского (и французского, немецкого с помощью плагинов) текста мы можем использовать пакет textblob. Это очень просто:
from textblob import TextBlob
TextBlob("This is very good!").sentiment
TextBlob("This is very bad!").sentiment
TextBlob("This isn't that bad!").sentiment
Свойство TextBlob «sentiment» возвращает кортеж, содержащий полярность и субъективность. Полярность — это число из диапазона [-1.0, 1.0], где 1 — положительная оценка, -1 — отрицательная. Субъективность — это число из диапазона [0.0, 1.0], где 0 — факт, 1 — мнение.
>>> TextBlob("This is very good!").sentiment
Sentiment(polarity=1.0, subjectivity=0.7800000000000001)
Полярность 1, поэтому оценка была очень положительной, а при высокой субъективности она рассматривалась скорее как мнение, чем как факт.
>>> TextBlob("This is very bad!").sentiment
Sentiment(polarity=-1.0, subjectivity=0.8666666666666667)
В данном случае мы получили -1, что очень плохо.
>>> TextBlob("This isn't that bad!").sentiment
Sentiment(polarity=-0.8749999999999998, subjectivity=0.6666666666666666)
Без контекста TextBlob все равно оценил его отрицательно. Что на самом деле означает «не так уж плохо»? Лучше, чем ожидалось? Хуже, чем ожидалось? Трудно сказать, и чтобы получить более полезную количественную оценку, нам нужны предложения с достаточным контекстом.
Отзывы на Tripadvisor
Отзыв — это хороший кусок текста для опробования TextBlob. Предварительно я собрал набор отзывов о нескольких заведениях на TripAdvisor с помощью сторонних скрапперов. Это дало мне список текстов отзывов, которые я мог бы ввести в библиотеку и посмотреть, какие результаты я получу. Для визуализации полярности я назначил красный/зеленый цвета для -1/1 и интенсивность для промежуточных значений:
Первый отмеченный отзыв отрицательный, и пользователь оставил отзыв с 1 звездой. Последний отзыв также 1-звездочный, но его полярность намного выше. Несмотря на то, что клиент был недоволен, он использовал меньше негативных выражений в своем отзыве. Что интересно, так это отзыв о среднем рынке. Это 5-звездочный отзыв, но он имеет низкую полярность — клиент был доволен, но нашел вещи, о которых он не был доволен — такие вещи могут быть ценным отзывом для заведения, в то время как они могут затеряться среди положительных отзывов (при средней оценке 4,5 вы внимательно смотрите на отрицательные отзывы, в то время как положительный отзыв может затеряться среди других положительных отзывов).
Код находится на Github:
https://github.com/riklaunim/sentiment-analysis-example
Полная статья с комментариями к коду:
https://rk.edu.pl/en/designing-sentiment-analysis-application-tripadvisor-reviews-python/