тональный анализ с разным количеством документов

Я пытаюсь провести анализ настроений по газетным статьям и отслеживать уровень настроений во времени. Для этого я в основном определяю все релевантные новостные статьи в течение дня, загружаю их в функцию polarity () и получаю средние баллы полярности для всех статей (точнее, среднее значение всего предложения из всех статей). в течение того дня.

Проблема в том, что в некоторые дни статей будет намного больше, чем в другие дни, и я думаю, что это может замаскировать некоторую информацию, если мы просто будем отслеживать среднесуточный показатель полярности. Например, оценка 0,1 из 30 новостных статей должна иметь больший вес по сравнению с оценкой 0,1, полученной только из 3 статей. и, конечно же, некоторые из самых экстремальных оценок полярности, которые я получил, были получены в те дни, когда было только несколько статей по теме.

Могу ли я принимать во внимание разное количество статей каждый день?

library(qdap)
sentence = c("this is good","this is not good")
polarity(sentence)

person Seamus Lam    schedule 21.01.2015    source источник
comment
Вы имеете в виду, можете ли вы взвесить баллы полярности каждого дня по количеству статей в этот день?   -  person lawyeR    schedule 21.01.2015
comment
Да, это приемлемая практика? И если да, то какой весовой коэффициент является хорошим?   -  person Seamus Lam    schedule 21.01.2015
comment
Может быть полезно сказать, откуда взялась эта функция polarity, а также привести минимальный рабочий пример MWE: stackoverflow.com/help/mcve   -  person Tyler Rinker    schedule 21.01.2015
comment
добавил упрощенный пример, чтобы показать, откуда взялась функция.   -  person Seamus Lam    schedule 21.01.2015


Ответы (1)


Я бы предупредил, что иногда высказывание чего-то сильного в несколько слов может нанести самый сильный удар. Убедитесь, что то, что вы делаете, имеет смысл с точки зрения ваших данных и исследовательских вопросов.

Один из подходов - использовать количество слов, как в следующем примере (здесь мне больше нравится первый подход):

poldat2 <- with(mraja1spl, polarity(dialogue, list(sex, fam.aff, died)))

output <- scores(poldat2)
weight <- ((1 - (1/(1 + log(output[["total.words"]], base = exp(2))))) * 2) - 1
weight <- weigth/max(weight)
weight2 <- output[["total.words"]]/max(output[["total.words"]])

output[["weighted.polarity"]] <- output[["ave.polarity"]] * weight   
output[["weighted.polarity2"]] <- output[["ave.polarity"]] * weight2   
output[, -c(5:6)]


##    sex&fam.aff&died total.sentences total.words ave.polarity weighted.polarity weighted.polarity2
## 1       f.cap.FALSE             158        1641        0.083       0.143583793        0.082504197
## 2        f.cap.TRUE              24         206        0.044       0.060969157        0.005564434
## 3       f.mont.TRUE               4          29        0.079       0.060996614        0.001397106
## 4       m.cap.FALSE              73         651        0.031       0.049163984        0.012191207
## 5        m.cap.TRUE              17         160       -0.176      -0.231357933       -0.017135804
## 6     m.escal.FALSE               9         170       -0.164      -0.218126656       -0.016977931
## 7      m.escal.TRUE              27         590       -0.067      -0.106080866       -0.024092720
## 8      m.mont.FALSE              70         868       -0.047      -0.078139272       -0.025099276
## 9       m.mont.TRUE             114        1175       -0.002      -0.003389105       -0.001433481
## 10     m.none.FALSE               7          71        0.066       0.072409049        0.002862997
## 11  none.none.FALSE               5          16       -0.300      -0.147087026       -0.002925046
person Tyler Rinker    schedule 21.01.2015