Отрицатели и модификаторы с Сюжет против SentimentR для анализа настроений в R - PullRequest
0 голосов
/ 09 декабря 2018

Этот вопрос двоякий.Ответ на любой вопрос будет адекватным решением.Очень благодарен, если вы можете показать предложение в виде кода R.

1) Лексикон NRC в пакете Сюжет дает самый широкий спектр эмоций, но, похоже, не контролирует отрицателей.После прочтения документации я все еще не уверен, как это преодолеть.Возможно, путем умножения положительно и отрицательно закодированных слов для каждого предложения, например, I (0) AM (0) NOT (-1) ANGRY (-1) = (-1 * -1) = 1. Однако я не знаюкак написать это в правильном коде.

2) После долгих исследований и испытаний я обнаружил, что лексикон jockers_rinker в SentimentR обрабатывает отрицатели и модифицирует их лучше (https://github.com/trinker/sentimentr#comparing-sentimentr-syuzhet-meanr-and-stanford). Я мог бы использовать 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

Первый вывод, похоже, не признает важности "очень", "не" и "никогда".

...