В этом примере показано, как использовать словарь Valence Aware и алгоритм sEntiment Reasoner (VADER) для анализа настроений.
Алгоритм VADER использует список аннотированных слов (лексикон настроения), где каждое слово имеет соответствующий счет настроения. Алгоритм VADER также использует списки слов, которые изменяют счета последующих слов в тексте:
Бустеры - слова или n-граммы, которые усиливают настроение дальнейших лексем. Для примера слова типа «абсолютно» и «удивительно».
Демпферы - слова или n-граммы, которые демпфируют настроение протекающих лексем. Для примера слова типа «вряд ли» и «несколько».
Отрицания - слова, которые сводят на нет настроение протекающих лексем. Для примера такие слова, как «нет» и «нет».
Чтобы оценить настроения в тексте, используйте vaderSentimentScores
функция.
Извлеките текстовые данные из файла weekendUpdates.xlsx
использование readtable
. Файл weekendUpdates.xlsx
содержит обновления состояния, содержащие хэштеги "#weekend"
и "#vacation"
.
filename = "weekendUpdates.xlsx"; tbl = readtable(filename,'TextType','string'); head(tbl)
ans=8×2 table
ID TextData
__ _________________________________________________________________________________
1 "Happy anniversary! ❤ Next stop: Paris! ✈ #vacation"
2 "Haha, BBQ on the beach, engage smug mode! ❤ #vacation"
3 "getting ready for Saturday night #yum #weekend "
4 "Say it with me - I NEED A #VACATION!!! ☹"
5 " Chilling at home for the first time in ages…This is the life! #weekend"
6 "My last #weekend before the exam ."
7 "can’t believe my #vacation is over so unfair"
8 "Can’t wait for tennis this #weekend "
Создайте массив токенизированных документов из текстовых данных и просмотрите первые несколько документов.
str = tbl.TextData; documents = tokenizedDocument(str); documents(1:5)
ans = 5x1 tokenizedDocument: 11 tokens: Happy anniversary ! ❤ Next stop : Paris ! ✈ #vacation 16 tokens: Haha , BBQ on the beach , engage smug mode ! ❤ #vacation 9 tokens: getting ready for Saturday night #yum #weekend 13 tokens: Say it with me - I NEED A #VACATION ! ! ! ☹ 19 tokens: Chilling at home for the first time in ages … This is the life ! #weekend
Оцените настроения токенизированных документов с помощью vaderSentimentLexicon
функция. Счета, близкие к 1, указывают на положительные настроения, счета, близкие к -1, указывают на отрицательные настроения и счета, близкие к 0, указывают на нейтральные настроения.
compoundScores = vaderSentimentScores(documents);
Просмотрите счета первых нескольких документов.
compoundScores(1:5)
ans = 5×1
0.4738
0.9348
0.6705
-0.5067
0.7345
Визуализируйте текст с положительными и отрицательными настроениями в облаках слов.
idx = compoundScores > 0; strPositive = str(idx); strNegative = str(~idx); figure subplot(1,2,1) wordcloud(strPositive); title("Positive Sentiment") subplot(1,2,2) wordcloud(strNegative); title("Negative Sentiment")
ratioSentimentScores
| tokenizedDocument
| vaderSentimentScores