Отрицатели и модификаторы с Сюжет против SentimentR для анализа настроений в R
Этот вопрос двоякий. Ответ на любой вопрос будет адекватным решением. Очень благодарен, если вы можете показать предложение в виде R-кода.
1) Лексикон NRC в пакете Сюжет дает самый широкий спектр эмоций, но, похоже, не контролирует отрицателей. После прочтения документации я все еще не уверен, как это преодолеть. Возможно, путем умножения положительно и отрицательно закодированных слов для каждого предложения, например, I(0) AM(0) NOT(-1) ANGRY(-1) = (-1*-1) = 1. Однако я не знаю как написать это в правильном коде.
2) После долгих исследований и испытаний я обнаружил, что лексикон jockers_rinker в SentimentR обрабатывает отрицатели и лучше их модифицирует ( https://github.com/trinker/sentimentr). Я мог бы использовать SentimentR для "проверки качества" результатов Suyzhet/NRC, сравнивая двоичные выходные данные настроений из двух пакетов. Если они слишком сильно отклоняются, NRC не достаточно точен для этого конкретного текста. Тем не менее, я знаю только, как получить индивидуальные оценки, а не общие оценки для каждого настроения (сумма положительных и отрицательных сумм).
Вы можете увидеть, как мои результаты теста сравниваются здесь на объединенной строке с эмоциями, выраженными с модификаторами и отрицателями и без них.
#Suyzhet:
library("syuzhet")
MySentiments = c("I am happy", "I am very happy", "I am not happy","It was
bad","It is never bad", "I love it", "I hate it")
get_nrc_sentiment(MySentiment, cl = NULL, language = "english")
#Result:
anger anticipation disgust fear joy sadness surprise trust negative positive
0 1 0 0 1 0 0 1 0 1
0 1 0 0 1 0 0 1 0 1
0 1 0 0 1 0 0 1 0 1
1 0 1 1 0 1 0 0 1 0
1 0 1 1 0 1 0 0 1 0
0 0 0 0 1 0 0 0 0 1
1 0 1 1 0 1 0 0 1 0
#SentimentR:
library("sentimentr")
MySentiments = c("I am happy", "I am very happy", "I am not happy","It was
bad","It is never bad", "I love it", "I hate it")
sentiment(MySentiments, polarity_dt =
lexicon::hash_sentiment_jockers_rinker,
valence_shifters_dt = lexicon::hash_valence_shifters, hyphen
= "", amplifier.weight = 0.8, n.before = 5, n.after = 2,
question.weight = 1, adversative.weight = 0.25,
neutral.nonverb.like = FALSE, missing_value = NULL)
#Results:
element_id sentence_id word_count sentiment
1 1 3 0.4330127
2 1 4 0.6750000
3 1 4 -0.3750000
4 1 3 -0.4330127
5 1 4 0.3750000
6 1 3 0.4330127
7 1 3 -0.4330127
Первый вывод, кажется, не признает важности "очень", "не" и "никогда".